mockAxios运行中被App.js调用的原理
来源:10-6 App.js 主入口文件测试编码
爱笑的小熊猫
2020-12-26
请问老师为何__mocks__中的axios.js可以在运行中自动被App.js用来替代真正的axios
我按着例子实现了这个axis的mock部分,可是mockAxios中的get总是不被调用到,App.js仍然调用真正的axios
请求老师帮助 谢谢!
我的代码实现在这个github中可以看到
https://github.com/cutePanda123/invoice-app/tree/master/src
写回答
1回答
-
同学你好 谢谢你认真的写代码发现了这个问题 这是新版 create-react-app 的一个 bug,issue 在这里都放了一年了,还没有修复。https://github.com/facebook/create-react-app/issues/7539
我建议你不要 __mocks__ 文件夹进行了 mock 了,而是在 test case 中直接 mock,你可以尝试我下面的代码 文档在这里:https://jestjs.io/docs/en/mock-functions#mocking-modules
import React from 'react'; import axios from 'axios' import { testItems, testCategories } from './testData'; import { mount } from 'enzyme'; import App from './App'; jest.mock('axios') //const waitForAsync = () => new Promise(resolve => setImmediate(resolve)); describe('App test', () => { afterEach(() => { jest.clearAllMocks(); }); it('getInitialData test', async () => { axios.get.mockImplementation(jest.fn((url) => { console.log("log output from mock axios!!!!!!!!!"); if (url.indexOf('categories') > -1) { return Promise.resolve({ data: testCategories }); } if (url.indexOf('transactions?') > -1) { return Promise.resolve({ data: testItems }); } return Promise.resolve({ data: { ...testItems[0], id: 'testId' } }); })) const wrapper = mount(<App />); expect(axios.get).toHaveBeenCalledTimes(2); }); });
20
相似问题