В настоящее время я пишу интеграционные тесты для маршрута, который принимает файл. Я тестирую для возврата ошибки, когда файл слишком велик, однако тест иногда проходит, а иногда терпит неудачу. Я подозреваю, что это результат того, как метод Supertest.attach
читает файл, это всего лишь предположение. Мне нужна помощь в выяснении, в чем именно заключается проблема, любой указатель на ресурсы будет оценен.
Я получаю следующую ошибку:
TypeError: Cannot read property 'body' of undefined
at Test.<anonymous> (C:\Users\HP-ELITEBOOK\Desktop\projects\makipay\backend\src\tests\integration\trade\upload_pop.js:3:6479)
at Test.assert (C:\Users\HP-ELITEBOOK\Desktop\projects\makipay\backend\node_modules\supertest\lib\test.js:181:6)
at Server.localAssert (C:\Users\HP-ELITEBOOK\Desktop\projects\makipay\backend\node_modules\supertest\lib\test.js:131:12)
at Object.onceWrapper (events.js:417:28)
at Server.emit (events.js:311:20)
at emitCloseNT (net.js:1653:8)
at processTicksAndRejections (internal/process/task_queues.js:83:21)
Текущий размер файла: 1 055 253 bytes
Определение набора тестов выглядит следующим образом:
describe('Profile upload Tests POST: /api/v1/profile', () => {
it('should return error for large file', (done) => {
request
.post('/api/v1/auth/signin')
.send({
email: 'user0@yahoo.com',
password: 'password',
})
.end((err, { body }) => {
request
.post('/api/v1/profile')
.set('Authorization', `Bearer ${body.data.token}`)
.field('trade_id', 'f3318b94-aa5c-4ee7-b8d9-7900d157e71b')
.attach('profile', './src/tests/fixtures/large_file.jpg')
.end((err, res) => {
const { body } = res;
if (err) return done(err);
expect(body.status).to.equal('error');
expect(body).to.have.property('error');
expect(res.statusCode).to.equal(413);
done();
});
});
});
});
Express Определение промежуточного программного обеспечения fileupload для запуска ошибки:
export const fileuploadHanlder = fileUpload({
tempFileDir: './tmp',
useTempFiles: true,
preserveExtension: true,
abortOnLimit: true,
limitHandler: (req, res, next) => {
try {
throw new Http413Error();
} catch (error) {
next(error);
}
},
uriDecodeFileNames: true,
limits: { fileSize: 1 * 1024 * 1024 }, // max size 1 048 576 bytes
debug: process.env['NODE_ENV'] === 'development'
});
Используемые технологии:
express: 4.17.1
express-fileupload: 1.1.9
Supertest: 4.0.2
node: 12.16.1