模拟Axios多个请求

时间:2018-12-05 05:57:55

标签: reactjs unit-testing axios jestjs enzyme

因此,我遇到了这个问题,我在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,其中我使用URLRegex请求进行了模拟。当我从测试环境进行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我尝试过NockJest-axios-mock(此方法有效,但是对于多个请求,我无法模拟所有响应),moxios

1 个答案:

答案 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),它将执行该部分