我正在使用fetch调用API,并为此编写测试用例。在进行Fetch调用时,我预计会得到模拟数据,但会得到API错误消息。
请帮我知道为什么它不嘲笑数据。
使用Jest,获取模拟模块。代码如下
const login = (username, password) => {
return fetch('endpoint/login', () => {
method: 'POST',
body: JSON.stringify({
data :{
username,
password
}
})
})
.then (res => res.json())
.then (data => {
if(data.response){
return {
response: "accessToken",
error: null
}
}else{
return {
response: null,
error: "Something went wrong"
}
}
})
}
现在我正在编写单元测试来测试这个api,如下所示:-
test("Auth Success Scenario", async () => {
const onResponse = jest.fn();
const onError = jest.fn();
fetchMock.mockResponseONce(JSON.stringify({
data: {
response: "accessToken",
error: null
}
}));
return await AuthService.login("andy","password")
.then(onResponse)
.catch(onError)
.finally( () => {
console.log(onResponse.mock.calls[0][0]) // its return API error not mocked data
})
})
这本该是评论,遗憾的是我没有足够的声誉。
您是否启用了文档链接中指定的笑话模拟
Create a setupJest file to setup the mock or add this to an existing setupFile. :
To setup for all tests
require('jest-fetch-mock').enableMocks()
Add the setupFile to your jest config in package.json:
"jest": {
"automock": false,
"setupFiles": [
"./setupJest.js"
]
}
因为这似乎是唯一的情况,在这种情况下,fetch将尝试对API进行实际调用,而不是给出模拟响应,从而导致失败。
您甚至可以为特定的测试文件以及启用模拟
import fetchMock from "jest-fetch-mock";
require('jest-fetch-mock').enableMocks();