Как читать аттачмент из рес супертеста? - PullRequest
1 голос
/ 18 июня 2020

У меня есть express конечная точка "/ api / posts /: id", которая возвращает некоторые метаданные о сообщении и самом файле сообщения через res.attachment(post.fileName).send(post). (Заметьте, я не уверен, правильно ли это)

Я пытаюсь проверить это с помощью супертеста. После const res = await request(server).get("/api/posts/a"); я могу прочитать метаданные сообщения через res.body. Но как мне прочитать вложение (то есть файл)?

Edit:

Кажется, мне нужно использовать библиотеку, например, огромную, для чтения возвращенного файла. res.files по умолчанию имеет значение null, но заполняет его. Итак, я попытался сделать это в моем тестовом файле шутки следующим образом:

const res = await request(server).get(`/api/posts/${post._id}`);
const form = formidable();
form.parse(res, (err, fields, files) => {
  console.log("inside parse");
  expect(0).toBe(1);
});

Но это не сработало. Консоль не регистрировала «внутренний синтаксический анализ», и на самом деле регистр прошел, хотя expect (0) .toBe (1) должен привести к сбою.

1 Ответ

0 голосов
/ 20 июня 2020

Прежде чем ответить, я просто хочу указать, что я отправлял сообщение неверным способом. В итоге я отправил файл сам по себе через res.sendFile(post.fileName)

. При тестировании перешел к чтению файла. Как упоминалось выше, мне пришлось использовать грозный для заполнения параметра res.files. Кроме того, мне пришлось изменить мою тестовую функцию шутки, чтобы заставить ее ждать грозного обратного вызова для fini sh:

it("returns 200 with post file when given existing post id", async (done) => {
  ...

  const res = await request(server).get(`/api/posts/${post._id}`);
  const form = formidable();
  form.parse(res, (err, fields, files) => {
    try {
      expect(0).toBe(1);
      done();
    } catch (error) {
      done(error);
    }
  });
});

Edit:

Лучшим подходом, который я нашел, было бы использовать ожидание супертеста через:

const expectedFile = await fsPromises.readFile(filename);
request(server)
  .get(`/api/posts/${post._id}/file`)
  .expect(200, expectedFile, done);
...