Ожидается ошибка с axios-mock-adapter - PullRequest
11 голосов
/ 16 апреля 2019

Я пытаюсь протестировать запрос на получение axios с axios-mock-adapter, так что выдается ошибка при статусе, который не равен 200. Однако, когда я выполняю тест (см. api.test.js), я получаю следующеесообщение:

Ошибка: ожидается (функция) .toThrowError (не определено)

Ожидается, что функция выдаст ошибку.Но ничего не получилось.

Как мне проверить, чтобы убедиться, что выдается ошибка, используя axios-mock-adapter, используя мои 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 Ответ

6 голосов
/ 19 апреля 2019

Проблема, которую я вижу в вашем коде, заключается в том, что expect().toThrowError() ожидает синхронного исключения, но ваш код фактически отклоняет обещание. Бит, который может сбить с толку, это то, что вы видите throw new Error('foo'); в вашем handleResponse. Это исключение, правда. Однако , поскольку этот код вызывается функцией async , это исключение преобразуется в отклонение обещания. Таким образом, await get('sampleUrl') не приводит к генерации синхронного исключения, а к отклонению асинхронного обещания.

Глядя на документацию Джеста , мне кажется, что вы должны делать:

return expect(expectedError()).rejects.toThrowError();

Вам нужно вызвать expectedError, потому что это функция, которая возвращает обещание, и вам нужно использовать .rejects, чтобы преобразовать отклонение в простое исключение, которое можно проверить с помощью .toThrowError(). Обязательно верните утверждение или await. В противном случае у вас будет свисающее обещание.

...