我很难找到有关如何测试此功能的信息:
const MyService = {
async stringify (entry, cb) {
try {
const response = await axios.post('localhost:3005/stringify', {
entry
})
cb(null, response.data)
} catch (minificationError) {
if (minificationError.response.status === 500) {
cb('error 1', null)
} else {
cb('error 2', null)
}
}
}
}
我知道我可以导入axios
并像这样模拟.post
:
axios.post.mockResolvedValue({
data: { some: 'value' }
})
如果MyService返回诺言,那将非常有用...但是如何处理回调?这是不好的做法吗?服务应该返回承诺,然后处理组件函数中的错误吗?
此外,我该如何开玩笑地模拟状态代码(以测试失败的状态?)
答案 0 :(得分:1)
首先,您必须设置模拟 axios ,之后您必须在测试用例中调用模拟api
const axios = {
post: jest.fn(() => {
return Promise.resolve({
data: {},
});
}),
create: () => axios,
request: {},
defaults: {
adapter: {},
headers: {},
},
interceptors: {
request: {
use() {},
},
response: {
use() {},
},
},
};
一旦设置了模拟 axios ,就可以在测试用例中访问并返回所需的任何模拟响应和状态代码。
mockAxios.post.mockImplementation((url) => {
if (url.includes("something")) {
return Promise.resolve({ data:{"response":""}, status: 200 });
}
return Promise.reject(new Error("not found"));
});