#javascript #jestjs #axios #axios-mock-adapter
#javascript #jestjs #axios #axios-mock-adapter
Вопрос:
Я пытаюсь протестировать запрос axios get axios-mock-adapter
таким образом, чтобы ошибка выдавалась со статусом, который не равен 200. Однако, когда я выполняю тест (см. api.test.js
), я получаю следующее сообщение:
Ошибка: ожидание (функция).Ошибка toThrowError(не определено)
Ожидалось, что функция выдаст ошибку. Но это ничего не выдало.
Как мне проверить, чтобы убедиться, что выдается ошибка, используя axios-mock-adapter
методы using my get
и handleResponse
? Спасибо!
api.test.js:
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
const handleResponse = (response) => {
if (response.status !== 200) {
throw new Error('foo');
} else {
return response.data;
}
};
const get = async (url) => {
const response = await axios.get(url, {withCredentials: true});
return handleResponse(response);
};
test('testing that, when making a get request to the appropriate url, an error is thrown '
' when status !== 200', async () => {
new MockAdapter(axios)
.onGet('sampleUrl')
.reply(500, {data: 'payload'});
const expectedError = async () => {
await get('sampleUrl');
};
expect(expectedError).toThrowError();
});
Ответ №1:
Проблема, которую я вижу в вашем коде, заключается в том, что expect().toThrowError()
ожидается синхронное исключение, но ваш код фактически отклоняет обещание. Бит, который может сбить с толку, заключается в том, что вы видите throw new Error('foo');
в своем handleResponse
. Это вызывает исключение, true. Однако, поскольку этот код вызывается async
функцией, это исключение преобразуется в отклонение обещания. Это await get('sampleUrl')
приводит не к возникновению синхронного исключения, а к отклонению асинхронного обещания.
Глядя на документацию Jest, мне кажется, что вы должны делать:
return expect(expectedError()).rejects.toThrowError();
Вам нужно вызвать expectedError
, потому что это функция, которая возвращает обещание, и вам нужно использовать .rejects
для преобразования отклонения в простое исключение, с которым можно протестировать .toThrowError()
. Обязательно верните утверждение или await
его. В противном случае у вас будет оборванное обещание.
Комментарии:
1. Ты, рок-чувак, уже некоторое время обдумывал это, твое решение сработало как шарм!