Как проверить вложенную ошибку, генерируемую функцией asyn c? - PullRequest
0 голосов
/ 14 февраля 2020

Рассмотрим следующие функции

const aPrivateAsyncQuery = async () => {
  try {
    return await axios.post('someURL', {query: 'someQuery'})
  } catch (error) {
    throw new Error(`A thrown error: ${error}`)
  }
}
export const aPublicAsyncFunction = async someVariable => {
  const data = await aPrivateAsyncQuery()
  if (data[someVariable]){
    return data[someVariable]
  }
  return {}
}

Как можно проверить, что aPrivateAsyncQuery выдает ошибку при вызове aPublicAsyncFunction?

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

  it('should throw when nested function throws', async () => {
    const someVariable = 'foo'

    axios.post.mockRejectedValue(new Error('bar'))

    expect(async () => { await aPublicAsyncFunction(someVariable) }).toThrow()
  })

Заранее спасибо!


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

Следующая реализация работала отлично:

  it('should throw when nested function throws', async () => {
    const someVariable = 'foo'

    axios.post.mockRejectedValue(new Error('bar'))

    await expect(aPublicAsyncFunction(someVariable)).rejects.toThrowError('bar')
  })

1 Ответ

1 голос
/ 15 февраля 2020

Похоже, что ожидаемый Throw не очень хорошо поддерживается с помощью асинхронных c функций .

В соответствии с этой проблемой вы можете протестировать свой метод с помощью синтаксиса:

it('should throw when nested function throws', async () => {
    const someVariable = 'foo'

    jest.spyOn(axios, 'post')
        .mockImplementation(() => Promise.reject(new Error('bar')));

    await expect(aPublicAsyncFunction(someVariable)).rejects.toThrow(new Error('A thrown error: Error: bar'));
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...