我刚刚发现了一种使用jest模拟axios的有用方法,然而,如果我使用不同的url多次调用axios,我如何根据url指定url和返回值呢?有没有办法不用第三方库就能做到呢?
谢谢
// users.test.js
import axios from 'axios';
import Users from './users';
jest.mock('axios');
test('should fetch users', () => {
const users = [{name: 'Bob'}];
const resp = {data: users};
axios.get.mockResolvedValue(resp);
// or you could use the following depending on your use case:
// axios.get.mockImplementation(() => Promise.resolve(resp))
return Users.all().then(data => expect(data).toEqual(users));
});
发布于 2019-09-02 00:24:50
您可以在.mockImplementation()
回调中处理多个条件:
jest.mock('axios')
axios.get.mockImplementation((url) => {
switch (url) {
case '/users.json':
return Promise.resolve({data: [{name: 'Bob', items: []}]})
case '/items.json':
return Promise.resolve({data: [{id: 1}, {id: 2}]})
default:
return Promise.reject(new Error('not found'))
}
})
test('should fetch users', () => {
return axios.get('/users.json').then(users => expect(users).toEqual({data: [{name: 'Bob', items: []}]}))
})
test('should fetch items', () => {
return axios.get('/items.json').then(items => expect(items).toEqual({data: [{id: 1}, {id: 2}]}))
})
发布于 2021-07-09 01:55:04
这对我很管用。下面显示了你将在哪里以及如何渲染应用程序。
it("should work.", async () => {
let component;
await act(() => {
return axios.get("https://api.address.here.com/").then(async (res) => {
component = renderer.create(<App />);
});
});
expect(component.toJSON()).toMatchSnapshot();
});
https://stackoverflow.com/questions/57747392
复制相似问题