gpt4 book ai didi

javascript - 使用 jest 模拟多个 axios 调用

转载 作者:行者123 更新时间:2023-11-29 18:40:15 27 4
gpt4 key购买 nike

我刚刚发现了这种使用 jest 来模拟 axios 的有用方法,但是,如果我使用不同的 url 多次调用 axios,我该如何指定 url 以及根据 url 返回的值?有什么办法可以不使用第 3 方库吗?

谢谢

    // 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));
});

最佳答案

您可以在 .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}]}))
})

关于javascript - 使用 jest 模拟多个 axios 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57747392/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com