Подтвердить запрос с помощью ax ios -mock-adapter? - PullRequest
0 голосов
/ 28 января 2020

Я сделал следующий тест, используя MockAdapter из axios-mock-adapter. Однако я пытаюсь утверждать, что функция get была эффективно вызвана, поэтому я создал шпиона. По какой-то причине это не работает, и я получаю:

expect(jest.fn()).toHaveBeenCalled()

Expected number of calls: >= 1
Received number of calls:    0

Вот мой тест:

it('gets publications', async() => {

    let spy = jest.spyOn(axios, "get");
    var mock = new MockAdapter(axios);
    mock.onGet(PUBLICATIONS_PATH + '/publications').reply(200, 
        {
            answer: {
                publications: [ "pub1", "pub2", "pub3" ]
            }
        });

    let queryParameters = {
        operation: 'FSale'
    }


    const publications = await PublicationService.getPublications(queryParameters);

    expect(publications.data.answer.publications).toEqual([ "pub1", "pub2", "pub3" ]); // works fine
    expect(spy).toHaveBeenCalled(); //This fails
})

Я на самом деле пытался использовать подход ответ здесь .

Обновление: вот код для getPublications

async function _getPublications(queryParameters){
  return await axios({
      method: 'get',
      url: `${PUBLICATIONS_PATH}/publications`,
      cancelToken: CancelTokenService.getSource().token,
      params: queryParameters,
      headers: {
        authorization: LocalStorageService.getAuthorization(),
        'Accept': ResourcesVersions.PUBLICATION
      }
  }).then(function (response){ return response }).catch(function (error){ return (axios.isCancel(error) ? error : error.response) })

}

Ответы [ 2 ]

1 голос
/ 31 января 2020

В тестовом коде, который вы указали, вы шпионите за методом ax ios get, но в методе getPublications вы не вызываете этот метод. Вместо этого вы вызываете метод axios напрямую.

Поскольку шпионить метод по умолчанию axios непросто, я бы предложил изменить код в getPublications для использования метода get:

async function _getPublications(queryParameters){
  return await axios.get(`${PUBLICATIONS_PATH}/publications`, {
      cancelToken: CancelTokenService.getSource().token,
      params: queryParameters,
      headers: {
        authorization: LocalStorageService.getAuthorization(),
        'Accept': ResourcesVersions.PUBLICATION
      }
  }).then(function (response){ return response }).catch(function (error){ return (axios.isCancel(error) ? error : error.response) })
}
0 голосов
/ 28 января 2020

Я не привык использовать jest.spy в моем тесте, но я думаю, что вы можете попробовать что-то вроде:

import axios from 'axios';

jest.mock('axios');
...

it('gets publications', async() => {

    const get = axios.get.mockResolvedValueOnce(yourMockedData)

    let queryParameters = {
        operation: 'FSale'
    }


    const publications = await PublicationService.getPublications(queryParameters);

    expect(publications.data.answer.publications).toEqual([ "pub1", "pub2", "pub3" ]); // works fine
    expect(get).toHaveBeenCalled(); //This fails
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...