Тест маршрута для больших файлов иногда проходит - PullRequest
0 голосов
/ 06 августа 2020

В настоящее время я пишу интеграционные тесты для маршрута, который принимает файл. Я тестирую для возврата ошибки, когда файл слишком велик, однако тест иногда проходит, а иногда терпит неудачу. Я подозреваю, что это результат того, как метод 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
...