Как заявить об асинхронном вызове метода с помощью toThrow with Jest - PullRequest
0 голосов
/ 07 февраля 2019

Я видел этот вопрос , который ожидает, что Promise сработает.В моем случае Error выбрасывается до и вне Promise.

Как я могу утверждать об ошибке в этом случае?Я попробовал варианты ниже.

test('Method should throw Error', async () => {

    let throwThis = async () => {
        throw new Error();
    };

    await expect(throwThis).toThrow(Error);
    await expect(throwThis).rejects.toThrow(Error);
});

1 Ответ

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

Вызов throwThis возвращает Promise, который должен отклоняться с Error, поэтому синтаксис должен быть:

test('Method should throw Error', async () => {

  let throwThis = async () => {
    throw new Error();
  };

  await expect(throwThis()).rejects.toThrow(Error);  // SUCCESS
});

Обратите внимание, что toThrow было исправлено для обещаний в PR 4884 и работает только в 21.3.0 + .

Так что это будет работать только , если вы используете Jest версию 22.0.0 или выше.


Если вы используете более раннюю версию Jest, вы можете передать spy в catch:

test('Method should throw Error', async () => {

  let throwThis = async () => {
    throw new Error();
  };

  const spy = jest.fn();
  await throwThis().catch(spy);
  expect(spy).toHaveBeenCalled();  // SUCCESS
});

... и при необходимости проверить Errorбросили проверяя spy.mock.calls[0][0].

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