Почему асинхронная функция модуля JEST не требует асинхронности, подтверждения или разрешения - PullRequest
0 голосов
/ 08 января 2019

All

Я новичок в Jest, раздел Тестирование асинхронного кода привел меня в замешательство, он предоставляет множество способов справиться с одним и тем же случаем:

[1] done()
[2] expect.assertions(1) + return Promise
[3] expect.assertions(1) + return expect.resolves
[4] async callback +  await + NO return expect

И еще более странно, когда я попадаю в раздел Mock Functions :

Секция макета модуля:

//users.test.js
import axios from 'axios';
import Users from './users';

jest.mock('axios');

test('should fetch users', () => {
  const resp = {data: [{name: 'Bob'}]};
  axios.get.mockResolvedValue(resp);

  // or you could use the following depending on your use case:
  // axios.get.mockImplementation(() => Promise.resolve(resp))

  return Users.all().then(users => expect(users).toEqual(resp.data));
});

Интересно, какой из этих четырех способов используется здесь? Любая деталь?

1 Ответ

0 голосов
/ 08 января 2019

Тест возвращает Promise.

Это соответствует [2] expect.assertions(1) + return Promise.

Просто обратите внимание, что вам нужно использовать expect.assertions, только если вы ожидаете, что Promise отклонит и используете catch:

Если вы ожидаете, что обещание будет отклонено, используйте метод .catch. Убедитесь в том, что вы добавили ожидаемые утверждения, чтобы убедиться, что вызывается определенное количество утверждений. В противном случае выполненное обещание не провалит испытание.

Если ожидается разрешение Promise, тогда вы можете сделать свои утверждения в виде then, как в примере кода, и просто вернуть полученный Promise:

Просто верните обещание из вашего теста, и Джест будет ждать, пока это обещание не будет выполнено. Если обещание отклонено, тест автоматически провалится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...