JEST Полученная функция не выдает, но HTTPError выбрасывается - PullRequest
1 голос
/ 14 апреля 2020

Я тестирую конечную точку с помощью JEST и Got. Я ожидаю 403 Запретная ошибка. Следующий код распечатывает ошибку из блока catch и завершается с ошибкой, что идентичный вызов не выдает ошибку. Почему?

    try {
        response = await api(`verify/${profile.auth.verifyToken}`, {method: 'POST'}).json();
    } catch (e) {
        console.log(e);
    }
    expect(async () => {
        response = await api(`verify/${profile.auth.verifyToken}`, {method: 'POST'}).json();
    }).toThrow();

Вывод:

console.log test/api.int.test.js:112
HTTPError: Response code 403 (Forbidden)
    at EventEmitter.<anonymous> (C:\dev\mezinamiridici\infrastructure\node_modules\got\dist\source\as-promise.js:118:31)
    at processTicksAndRejections (internal/process/task_queues.js:97:5) {
  name: 'HTTPError'
}


Error: expect(received).toThrow()
Received function did not throw

Этот вариант также не работает:

expect(() => api(`verify/${profile.auth.verifyToken}`, {method: 'POST'})).toThrow();

Кстати, когда HTTPError выбрасывается и не перехватывается, есть нет стека и я не вижу, куда была брошена ошибка. Если есть другая ошибка, я точно вижу, какая тестовая линия была ответственна. Почему?

1 Ответ

2 голосов
/ 14 апреля 2020

expect(...).toThrow() - для проверки, была ли выдана ошибка из синхронной функции. Он не охватывает тестирование, если Promise попадает в отклоненное состояние, несмотря на то, что асин c функции используют ту же терминологию throw / catch.

Попробуйте expect(...).rejects.toThrow() вместо:

expect(() => api(`verify/${profile.auth.verifyToken}`, {method: 'POST'}).json())
  .rejects.toThrow();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...