Как смоделировать Axios как экспорт по умолчанию с Jest - PullRequest
0 голосов
/ 11 сентября 2018

Как мне смоделировать axios этот экспорт как функцию по умолчанию?

У меня есть помощник API, который обобщает запрос API с помощью axios()

api.js

export const callApi = (endpoint, method, data = {}) => {

  return axios({
    url: endpoint,
    method,
    data
  })
  .then((response) => // handle response)
  .catch((error) => // handle error)
};

api.spec.js

import axios from 'axios';
import { callApi } from './api';

describe('callApi()', () => {
  it('calls `axios()` with `endpoint`, `method` and `body`', () => {

    // mock axios()
    jest.spyOn(axios, 'default');

    const endpoint = '/endpoint';
    const method = 'post';
    const data = { foo: 'bar' };

    // call function
    callApi(endpoint, method, data);

    // assert axios()
    expect(axios.default).toBeCalledWith({ url: endpoint, method, data});
  });
}); 

результат

Expected mock function to have been called with:
  [{"data": {"foo": "bar"}, "method": "post", "url": "/endpoint"}]
But it was not called.

Вызов работает нормально, еслиЯ издеваюсь axios.get() или другими методами, но не только для axios().Я не хочу менять определение функции callApi().

Как мне по умолчанию издавать axios()?Что я пропустил?

1 Ответ

0 голосов
/ 11 сентября 2018

Вы не можете использовать jest.spyOn(axios, 'default') при прямом вызове axios (без default).Изменение вашей реализации в api.js на axios.default(...args) делает тестовый проход успешным.


Потенциальное изменение, которое вы можете сделать, это использовать jest.mock('axios') вместо jest.spyOn.

import axios from 'axios';
import { callApi } from './api';

jest.mock('axios');

// Make sure to resolve with a promise
axios.mockResolvedValue();

describe('callApi()', () => {
  it('calls `axios()` with `endpoint`, `method` and `body`', () => {
    const endpoint = '/endpoint';
    const method = 'post';
    const data = { foo: 'bar' };

    // call function
    callApi(endpoint, method, data);

    // assert axios()
    expect(axios).toBeCalledWith({ url: endpoint, method, data});
  });
}); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...