Файлы, которые не отправляются в многочастной форме при тестировании конечной точки с использованием Jest Supertest Formidable - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь протестировать конечную точку, которая должна получить данные multipart / form. Я отправляю коллекцию изображений, которую хочу обработать и сохранить на сервере или CDN. Я использую Jest, Express и Грозный.

Конечная точка

router.post("/videos", async (req, res) => {

  new formidable.IncomingForm().parse(req, (err, fields, files) => {
    console.log('PARSE FORM');
    if (err) {
      console.error('Error', err);
      throw err
    }
    console.log('Fields', fields);
    console.log('Files', files);
    for (const file of Object.entries(files)) {
      console.log('FILE', file)
    }
  });

  res.status(200).send('Created Video');
});

Тест

describe("Video Endpoints", () => {
  it('should create a new timelapse video', done => {
    request
      .post('/api/videos')
      .field('file', 'some random value')
      .attach('image', `${__dirname}/__mocks__/image.png`)
      .then(res => {
        console.log('THEN');
        done();
      })
  });
});

При запуске теста он не достигает грозного метода синтаксического анализа.

Если изменить метод my attach на этот ...

.attach('image', fs.readFileSync(`${__dirname}/__mocks__/xdebugcurlaccessingwpapi.png`))

Он достигнет метода синтаксического анализа, но он увидит это как поле, а не файл.

Если я сделаю тот же запрос, но из моего приложения реагирования, используя fetch, он отлично работает.

Что я делаю не так? Об этом уже несколько дней. Lol.

Любая помощь будет отличной.

Спасибо.

1 Ответ

0 голосов
/ 27 марта 2020

Я не совсем уверен, почему, но если вы добавите

.set({connection: 'keep-alive'})

, тогда это работает.

Окончательное решение

request
  .post('/api/videos')
  .set({connection: 'keep-alive'})
  .field('name', 'Richard')
  .attach('image', mockImage)
  .then(res => {
    console.log('THEN');
    done();
  });
});

Было бы хорошо, если бы кто-то понял, почему это так.

Я думаю, что это может закрыть поток для изображения, но может ' быть уверенным.

...