Тестовый файл читается с помощью JEST - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь проверить следующую функцию:

async function read () {
  return new Promise(function(resolve, reject) {
    fs.readFile("INVALID_PATH", (err, contents) => {
      if (err) {
        reject(new Error('ERROR'));
      }
      resolve(contents);
    });
  });
}

через тест:

try {
  await read();
} catch (e) {
  expect(e).toMatch('ERROR');
}

Однако, я не могу поймать отклонение при улове, это дает мне тайм-аут .

Есть предложения?

РЕДАКТИРОВАТЬ:

Мне удалось заставить его работать, используя макет, таким образом:

try {
  fs.readFile.mockReset()
  fs.readFile.mockImplementation((path, options, cb) => {
    cb('ERROR')
  })

  await readFile()

} catch (err) {
  expect(err).toBe('ERROR')
}

Однако я до сих пор не понимаю, зачем это нужно ...

1 Ответ

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

Вы пытались объявить тестовую функцию как async в Jest? await нельзя использовать вне функций asyn c (или в коде верхнего уровня), вы должны сделать что-то вроде этого:

it('works with async/await', async () => {
  expect.assertions(1);
  const data = await user.getUserName(4);
  expect(data).toEqual('Mark');
});

// async/await can also be used with `.resolves`.
it('works with async/await and resolves', async () => {
  expect.assertions(1);
  await expect(user.getUserName(5)).resolves.toEqual('Paul');
});

Дополнительная информация для тестирования async / await в jest https://jestjs.io/docs/en/tutorial-async.html

...