Убедитесь, что вы вернули Promise
из getusers
, чтобы вы могли await
в своем тесте.
Вот полный рабочий пример:
const axios = require('axios');
const MockAdapter = require('axios-mock-adapter');
const url = 'test-url';
const params = {};
function getusers(config) {
const { successCB } = config;
return axios.get(url, params) // <= return the Promise
.then(response => {
successCB(response.data, config);
});
}
test('getusers', async () => { // <= async test function
const mock = new MockAdapter(axios);
const successCB = jest.fn();
mock.onGet(url).reply(200, 'success');
const axiosSpy = jest.spyOn(axios, 'get');
await getusers({ successCB }); // <= await the Promise
expect(axiosSpy).toHaveBeenCalled(); // Success!
expect(successCB.mock.calls[0][0]).toBe('success'); // Success!
})
Обновление
Если синтаксис async/await
не является опцией, вы можете сделать утверждения в обратном вызове then
и вернуть полученный Promise
из теста, чтобы Jest
знал, что его ждет:
test('getusers', () => {
const mock = new MockAdapter(axios);
const successCB = jest.fn();
mock.onGet(url).reply(200, 'success');
const axiosSpy = jest.spyOn(axios, 'get');
return getusers({ successCB }).then(() => {
expect(axiosSpy).toHaveBeenCalled(); // Success!
expect(successCB.mock.calls[0][0]).toBe('success'); // Success!
});
})