我有一個構建在Express.js上的應用程序,我想測試文件上傳功能。我試圖重現解析爲req.files的對象(使用express.bodyParser中間件時)。我怎樣才能做到這一點?如何使用摩卡上傳的文件進行單元測試
回答
您可以直接在摩卡做到這一點,但它是一個有點棘手。這裏有一個例子發佈的圖像:
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()
})
內容處置的名參數是你的文件將作爲通過req.files訪問(所以req.files.image我的例子) 你也可以使用像這樣的數組值:name =「images []」,你的文件將通過數組提供,例如:req.files.images [0]
此外,如果你還沒有使用它你應該看看這個(使摩卡/表達測試更容易〜): https://github.com/visionmedia/express/blob/master/test/support/http.js
編輯:由於express 3-beta5,express使用超級。要看看舊的http.js代碼看看這裏:https://github.com/visionmedia/express/blob/3.0.0beta4/test/support/http.js 或者乾脆移動到超特技。
您可以嘗試使用zombie.js https://github.com/assaf/zombie,它創建了一個虛擬瀏覽器,用於測試基本功能。它可以將文件附加到一個特定的輸入字段,並支持cookie和session
只是碰到這個模塊由TJ:https://github.com/visionmedia/supertest。
下面是一個如何使用超級模塊來做的例子。
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();
});
});
});
當我嘗試這樣做時,req.files仍未定義。我正在使用bodyParser,並且文件沒有ENOENT錯誤。 – 2015-03-01 18:01:09
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();
});
});
});
改變附加( '圖像')附加( '文件')將解決沒有定義req.files.file的問題。
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()
});
});
});
- 1. 傳球$事件進行單元測試的情況下,摩卡
- 2. 使用摩卡雲測試9,從node.js執行摩卡測試
- 3. 使用Zend Framework進行文件上傳和單元測試
- 4. 如何同步執行摩卡單元測試用例?
- 5. VSCode我如何使用es6摩卡單元測試和jsx文件進行調試
- 6. 如何運行更好斷言和摩卡的單元測試?
- 7. 如何在單元測試之外使用摩卡?
- 8. VS2015中TypeScript的摩卡單元測試
- 9. 承諾在摩卡單元測試
- 10. 摩卡單元測試貓鼬模型
- 11. 如何使用摩卡測試承諾
- 12. 使用Grunt.js運行摩卡測試
- 13. MakeFile使用NPM運行摩卡測試
- 14. 如何用流體單元測試流星法:摩卡
- 15. 如何終止摩卡測試運行?
- 16. 需要外部js文件進行摩卡測試
- 17. 如何在struts單元測試中測試文件上傳?
- 18. 使用Immutable.js進行摩卡測試失敗時與Karma運行
- 19. 使用摩卡和jsdom失敗的反應單元測試
- 20. 單元測試使用Node.js,Gulp.js和摩卡的angularjs控制器
- 21. 使用.done()進行的摩卡測試有什麼問題?
- 22. 如何從運行測試之前,對摩卡讀取文件?
- 23. 從gulp文件傳遞變量到摩卡測試文件
- 24. 如何在expressjs應用上作爲auth0用戶進行摩卡測試?
- 25. Node.js單元測試 - 使用摩卡創建模擬層
- 26. 使用摩卡單元測試異步 - 瀑布
- 27. 如何編寫單元測試流星摩卡[關閉]助手
- 28. 使用摩卡在NodeJS中進行OAuth流測試
- 29. 使用摩爾進行交互測試
- 30. iOS上的單元測試:測試文件上傳/下載
.write was undefined – dianz 2013-07-03 01:57:43