我正在尝试测试我的axios函数。
在这里发现了这个问题:如何在玩笑中测试axios?,它指向使用axios-mock-adapter
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
import chatbot from './chatbot';
describe('Chatbot', () => {
it('returns data when sendMessage is called', done => {
var mock = new MockAdapter(axios);
const data = { response: true };
mock.onGet('https://us-central1-hutoma-backend.cloudfunctions.net/chat').reply(200, data);
chatbot.sendMessage(0, 'any').then(response => {
expect(response).toEqual(data);
done();
});
});
});真正的功能:
/**
* Retrieve all Akamai images
* @param {String} akamai Akamai url
* @return {Thenable} Resolved: Akamai images
*/
export const callGetAkamai = () =>
makeRequest('/akamai', 'GET')
.catch(defaultCatch('callGetAkamai'));我的测试:
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
import { callGetAkamai } from './api';
describe('GetAkamai', () => {
it('returns data when callGetAkamai is called', (done) => {
console.log('MockAdapter', MockAdapter);
const mock = new MockAdapter(axios);
// const mock = axios.create({
// baseURL: 'https://us-central1-hutoma-backend.cloudfunctions.net/chat/'
// });
const data = { response: true };
mock.onGet('https://us-central1-hutoma-backend.cloudfunctions.net/chat').reply(200, data);
callGetAkamai().then((response) => {
expect(response).toEqual(data);
done();
});
});
});

发布于 2018-03-29 18:27:25
你已经在嘲笑axios了吗?我自己也遇到过这个问题,在查看了所有错误的地方之后,我意识到我已经在用jest来嘲笑jest了。
在您的setupTestFrameworkScriptFile中放置以下片段
const mockNoop = () => new Promise(() => {});
// Notice how `create` was not being mocked here...
jest.mock('axios', () => ({
default: mockNoop,
get: mockNoop,
post: mockNoop,
put: mockNoop,
delete: mockNoop,
patch: mockNoop
}));如果您使用的是axios-mock-adapter,那么您可能可以同时完成这两项操作,但您可能希望删除其他模拟(并跳过上面的片段)。
发布于 2019-04-28 01:06:36
在这里添加这一点,因为这是第一次对谷歌的问题和答案的选择并没有真正回答问题。
这个问题通常发生在您已经在模拟axios (很可能在__mocks__文件夹中)时。
使用jest,您可以显式地取消模拟,然后调用这个axios-mock-adapter。
jest.unmock('axios');
import axios from 'axios';
import MockAdapter from 'axios-mock-adapter';
...axios-mock-adapter在处理外部请求时提供了很好的、灵活的apis。然而,它并不能在全球范围内阻止应用程序进行外部调用,这些调用可以由不同组件中的测试触发。
因此,我发现使用axios-mock-adapter和在__mocks__文件夹中进行手动模拟同样有帮助。
https://stackoverflow.com/questions/49413937
复制相似问题