2012-04-12 3 views

Antwort

10

Sie diese direkt in Mokka tun können, aber es ist ein bisschen schwierig. Hier ist ein Beispiel, ein Bild schreibt:

var filename = 'x.png' 
    , boundary = Math.random() 

request(app) 
    .post('/g/' + myDraftGallery._id) 
    .set('Content-Type', 'multipart/form-data; boundary=' + boundary) 
    .write('--' + boundary + '\r\n') 
    .write('Content-Disposition: form-data; name="image"; filename="'+filename+'"\r\n') 
    .write('Content-Type: image/png\r\n') 
    .write('\r\n') 
    .write(fs.readFileSync('test/'+filename)) 
    .write('\r\n--' + boundary + '--') 
    .end(function(res){ 
    res.should.have.status(200) 
    done() 
    }) 

Die Name Parameter der Content-Disposition ist das, was Ihre Datei als über req.files zugänglich sein wird (so req.files.image für mein Beispiel) Sie können auch Verwenden Sie einen Array-Wert wie diesen: name = "images []" und Ihre Datei (en) wird über ein Array verfügbar sein, zB: req.files.images [0]

Auch wenn Sie es nicht bereits verwenden Sie sollten sich dies ansehen (macht Mokka/Express-Test ein bisschen einfacher): https://github.com/visionmedia/express/blob/master/test/support/http.js

Bearbeiten: Seit Express 3-Beta5 verwendet Express Supertest. Um Blick auf die alten http.js Code hier: https://github.com/visionmedia/express/blob/3.0.0beta4/test/support/http.js Oder einfach zu Supertest bewegen sich über ..

+0

.write war undefined – dianz

39

Hier ist ein Beispiel, wie Sie es mit Supertest-Modul tun würden.

var should = require('should'), 
    supertest = require('supertest'); 
var request = supertest('localhost:3000'); 

describe('upload', function() { 
    it('a file', function(done) { 
     request.post('/your/endpoint') 
       .field('extra_info', '{"in":"case you want to send json along with your file"}') 
       .attach('image', 'path/to/file.jpg') 
       .end(function(err, res) { 
        res.should.have.status(200); // 'success' status 
        done(); 
       }); 
    }); 
}); 
+3

Wenn ich dies versuche, ist req.files noch undefiniert. Ich verwende bodyParser und keine ENOENT-Fehler für die Datei. –

6
var expect = require('expect.js'); 
supertest = require('supertest'); 
var request = supertest('localhost:3000'); 

describe('create album', function() { 
    it('valid ', function (done) { 
     request.post('/albums') 
      .set('Authorization', 'Token eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.IjkxMTg3NTk1ODg2MCI.gq32xfcOhv5AiZXJup5al1DGG0piyGWnrjZ5NouauCU') 
      .field('Content-Type', 'multipart/form-data') 
      .field('name', 'moni') 
      .field('description', 'Nature+Pics') 
      .field('caption', 'nature') 
      .field('contacts', '["' + 911354971564 + '","' + 919092888819 + '"]') 
      .field('dimensions', '{"photo1":{"height": 10, "width": 10}, "photo2":{"height": 20, "width": 20}, "photo3":{"height": 20, "width": 20}, "photo4":{"height": 20, "width": 20}, "photo5":{"height": 20, "width": 20}}') 
      .attach('photo1', '/home/monica/Desktop/pic/1.jpeg') 
      .attach('photo2', '/home/monica/Desktop/pic/2.jpeg') 
      .attach('photo3', '/home/monica/Desktop/pic/3.jpeg') 
      .attach('photo4', '/home/monica/Desktop/pic/4.jpeg') 
      .attach('photo5', '/home/monica/Desktop/pic/5.jpeg') 
      .end(function (err, res) { 
      if (err) { 
       console.log(err); 
      } else expect(res.status).to.equal(200); 
      done(); 
     }); 
    }); 

}); 
3

befestigen ändern ('Bild') ('Datei') befestigen wird das Problem der req.files.file nicht definiert lösen.

var should = require('should'), 
    supertest = require('supertest'); 
var request = supertest('localhost:3000'); 

describe('upload', function() { 
    it('a file', function(done) { 
     request.post('/your/endpoint') 
       .field('extra_info', '...') 
       .attach('file', 'path/to/file.jpg') 
       .end(function(err, res) { 
        res.should.have.status(200) // 'success' status 
        done() 
       }); 
    }); 
}); 
+0

eigentlich nicht lösen es für mich, immer noch nicht 'req.files.file ' – knutole

+1

Haben Sie jemals diese @ Knutole lösen? –

+0

@AlexChin Ja, danke. (Erinnere dich nicht wie.) – knutole