Tôi có một ứng dụng được xây dựng trên Express.js và tôi muốn thử nghiệm chức năng tải tệp lên. Tôi đang cố gắng để tái tạo các đối tượng phân tích cú pháp để req.files (khi sử dụng trung gian express.bodyParser). Tôi có thể làm cái này như thế nào?Cách kiểm tra đơn vị với tải lên tệp bằng mocha
Trả lời
Bạn có thể làm điều này trực tiếp trong Mocha nhưng đó là một chút khéo léo. Dưới đây là một ví dụ đăng một hình ảnh:
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()
})
Các tên tham số của Content-Disposition là những gì tập tin của bạn sẽ được truy cập như qua req.files (vì vậy req.files.image ví dụ của tôi) Bạn cũng có thể sử dụng giá trị mảng như sau: name = "images []" và (các) tệp của bạn sẽ có sẵn qua mảng, ví dụ: req.files.images [0]
Ngoài ra nếu bạn chưa sử dụng bạn nên xem xét điều này (làm cho thử nghiệm mocha/express nhanh hơn ~ bit ~ dễ dàng hơn): https://github.com/visionmedia/express/blob/master/test/support/http.js
Chỉnh sửa: Kể từ khi thể hiện 3-beta5, sử dụng nhanh nhất siêu cấp. Để xem mã http.js cũ, hãy xem tại đây: https://github.com/visionmedia/express/blob/3.0.0beta4/test/support/http.js Hoặc đơn giản là chuyển sang supertest ..
Bạn có thể thử sử dụng zombie.js https://github.com/assaf/zombie, nó tạo trình duyệt ảo để thử nghiệm với chức năng cơ bản. Nó có thể đính kèm một tập tin vào một lĩnh vực đầu vào cụ thể và hỗ trợ các tập tin cookie và các buổi
ý chính liên quan: https://gist.github.com/764536
Chỉ cần xem mô-đun này bằng TJ: https://github.com/visionmedia/supertest.
Dưới đây là ví dụ về cách bạn làm điều đó với mô-đun siêu lớn nhất.
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();
});
});
});
Khi tôi thử điều này, req.files vẫn chưa được xác định. Tôi đang sử dụng bodyParser và không có lỗi ENOENT cho tệp. –
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();
});
});
});
Thay đổi đính kèm ('image') để đính kèm ('file') sẽ giải quyết vấn đề của req.files.file không xác định.
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. Đơn vị Kiểm tra tệp tải lên, làm cách nào?
- 2. Làm cách nào để kiểm tra mã AngularJS bằng Mocha?
- 3. Cách kiểm tra tải lên nhiều tệp bằng Cucumber/Capybara?
- 4. Cách kiểm tra lời hứa với Mocha
- 5. Node.JS kiểm tra DOM với Mocha?
- 6. Làm cách nào để tải lên tệp thử nghiệm đơn vị bằng MockHttpServletRequest?
- 7. Kiểm tra đơn vị Tệp I/O
- 8. Bài kiểm tra đơn vị bằng Python
- 9. Cách kiểm tra kích thước tệp khi tải lên
- 10. sử dụng thử nghiệm mocha với cloud9, thực hiện kiểm tra mocha từ node.js
- 11. Tải lên nhiều tệp bằng kiểm tra md5 trước khi tải lên
- 12. Kiểm tra Mocha với Yeoman và PhantomJS
- 13. Đơn vị kiểm tra destructors?
- 14. Kiểm tra đơn vị XQuery
- 15. Kiểm tra đơn vị XSLT
- 16. Bài kiểm tra đơn vị cơ bản so với bài kiểm tra đơn vị
- 17. "App_GlobalResources" không tải trong trường hợp kiểm tra Đơn vị
- 18. cách kiểm tra trình khách http của node.js bằng mocha?
- 19. Tư vấn kiểm tra đơn vị - cách kiểm tra đơn vị của bạn .asmx
- 20. Đơn vị kiểm tra TSQL
- 21. Kiểm tra vòng lặp Mocha?
- 22. Kiểm tra đơn vị đường ray không tải đồ đạc
- 23. Kiểm tra đơn vị XCode
- 24. Kiểm tra đơn vị CacheManager
- 25. DAO Kiểm tra đơn vị
- 26. Tải hình ảnh thử nghiệm để kiểm tra đơn vị
- 27. Kiểm tra đơn vị EJB
- 28. Đơn vị kiểm tra RedirectToRouteResult
- 29. Kiểm tra đơn vị Scala
- 30. Tải lên tệp PHP - hình ảnh chỉ kiểm tra
.write is undefined – dianz