因此,我遇到了这个问题,我在componentDidMount
中发送了4到5个API调用,并且我希望模拟响应以测试场景。这就是我的componentDidMount
的样子
this.updateTokenHOC(this.getCommentsData)
this.updateTokenHOC(this.checkReviewer)
this.updateTokenHOC(this.getStepDataFromServer,1)
this.updateTokenHOC(this.getStepDataFromServer,2)
this.updateTokenHOC(this.getStepDataFromServer,3)
this.updateTokenHOC(this.getStepDataFromServer,4)
this.updateTokenHOC(this.getStepDataFromServer,5)
是的,所有这些都是API调用。
我尝试了axios-mock-adapter,其中我使用URL
,Regex
请求进行了模拟。当我从测试环境进行axios调用时,它会给我模拟响应。但是这些调用会更改状态,而我却找不到状态。
测试无法模拟此调用。如您所见,在调试时,我将测试属性设为了状态
getCommentsData(config) {
const type = this.state.viewType
const id = this.state.requestId
instance.get(`/review/sections?request_id=${id}&request_type=${type}`, config)
.then((response) => {
this.setState({test:'iam in comments data'})
if (response.status === 200) {
for (let step in response.data.sections) {
if (response.data.sections[step].section_type === 'device_quota') {
this.setState({
...this.state,
steps: {
...this.state.steps,
step1: {
...this.state.steps.step1,
comments: response.data.sections[step].comments,
},
}
})
}
替代解决方案可以是,如果我可以像在酶wrapper.find('ViewReview')。instance()中那样单独测试此方法,但还没有成功。
P.S我尝试过Nock,Jest-axios-mock(此方法有效,但是对于多个请求,我无法模拟所有响应),moxios
答案 0 :(得分:0)
好的,所以我找到了解决方法。
使用jest-axios-mock。
所以它的作用是堆叠您的呼叫。如果我在ComponentDidMount中有4个调用,并且我想模拟第二个API调用的响应,我将必须这样做
let FirstAPIcallMockResponse = {
data: {
"SomeData": [
{
"SomeProperty": SomeValue,
"SomeProperty": SomeValue,
}
]
},
status: 200
}
let fakeResponse = {
data: {},
status: 404
}
mockAxios.mockResponse(fakeResponse)
mockAxios.mockResponse(responseObj)
mockAxios.mockResponse(fakeResponse)
mockAxios.mockResponse(fakeResponse)
注意:假响应的状态应该为404或API调用主体中的其他内容,如果您没有条件if(response.status === 200),它将执行该部分