У меня есть приложение, построенное на Express.js, и я хотел бы проверить функциональность загрузки файлов. Я пытаюсь воспроизвести объект, обработанный req.files (при использовании промежуточного ПО express.bodyParser). Как я могу это сделать?Как выполнить модульный тест с загрузкой файла в mocha
ответ
Вы можете сделать это непосредственно в мокко, но это немного сложнее. Вот пример размещения изображения:
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()
})
Имя параметр Content-Disposition, что ваш файл будет доступен, как через req.files (так req.files.image для моего примера) Вы можете также используйте значение массива, подобное этому: name = "images []", и ваши файлы будут доступны через массив, например: req.files.images [0]
Также, если вы еще не используете его вы должны взглянуть на это (упрощает мокко/экспресс-тестирование ~ бит ~): https://github.com/visionmedia/express/blob/master/test/support/http.js
Редактировать: Поскольку экспресс-3-бета5, экспресс использует супертест. Для того, чтобы посмотреть на старый код http.js посмотреть здесь: https://github.com/visionmedia/express/blob/3.0.0beta4/test/support/http.js Или просто перейти на Supertest ..
Вы можете попробовать использовать zombie.js https://github.com/assaf/zombie, он создает виртуальный браузер для тестирования с базовыми функциями. Он может прикрепить файл к конкретному полю ввода и поддерживает куки и сессии
связанная суть: https://gist.github.com/764536
Просто наткнулся на этот модуль на TJ: https://github.com/visionmedia/supertest.
Вот пример того, как вы это сделаете с помощью модуля 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 для файла. –
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. Как выполнить модульный тест NSFetchedResultsControllerDelegate?
- 2. Включая модули в модульный тест mocha
- 3. Как выполнить модульный тест didFinishLaunchingWithOptions?
- 4. Как выполнить модульный тест openWithCompletionHandler
- 5. Как выполнить модульный тест NServiceBus.Configure.WithWeb()?
- 6. Как выполнить модульный тест accepts_nested_attributes_for с RSpec?
- 7. Как выполнить модульный тест в контроллере?
- 8. Как выполнить модульный тест/mock ElasticSearch
- 9. Как выполнить модульный тест для относительной производительности?
- 10. Как выполнить модульный тест командного класса PHP
- 11. Как выполнить модульный тест, когда ActiveRecord отключен?
- 12. Как выполнить модульный тест clojure.core.async go macros?
- 13. Как выполнить модульный тест для двоичного метода?
- 14. Как выполнить модульный тест методом пустоты
- 15. Первый асинхронный модульный тест с Mocha и Sinonjs
- 16. как модульный тест navigator.notification.alert
- 17. Как выполнить модульный тест в IOS с помощью XCode?
- 18. Как модульный тест IDataErrorInfo?
- 19. Не удалось выполнить модульный тест ValidationContext?
- 20. Как выполнить модульный тест с помощью Sonar Qube 5.0.1
- 21. Как выполнить модульный тест с использованием рамки для бутылок
- 22. Как выполнить модульный тест Сервисные стеки Redis Client с Moq
- 23. Как выполнить модульный тест объекта с запросами базы данных
- 24. Как выполнить модульный тест методом с типом возвращаемого типа?
- 25. Как выполнить модульный тест ниже, отредактируйте код с помощью webpack
- 26. Как получить модульный тест?
- 27. Как построить модульный тест
- 28. Неразрешенный модульный тест Python
- 29. Как выполнить модульный тест метода, который читает данный файл
- 30. Как выполнить модульный тест Textrenderer.DrawText метод в C#
.WRITE было определено – dianz