Mock Axios несколько запросов - PullRequest
       20

Mock Axios несколько запросов

0 голосов
/ 05 декабря 2018

Итак, я столкнулся с этой проблемой, когда у меня есть от 4 до 5 вызовов API, отправленных в componentDidMount, и я хочу высказать ответ для некоторых, чтобы протестировать сценарии.Вот как мой 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 из среды тестирования, он дает мне ложный ответ.но эти вызовы меняют состояние, которое я не нахожу в своем состоянии.

Тестирование не смоделировало этот вызов.как вы можете видеть для отладки, я сделал свойство test в состоянии

  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 (), но иметьне удалось с этим, а.

PS я пробовал Nock , Jest-axios-mock (это работает, но для нескольких запросов я не могу высказать ответ для всех), moxios

1 Ответ

0 голосов
/ 13 декабря 2018

Хорошо, так что я нашел способ решить эту проблему.

с помощью jest-axios-mock.

Так что это делает стек ваших звонков.Если у меня есть 4 вызова в ComponentDidMount, и я хочу смоделировать ответ на 2-й вызов 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 или что-то другое в вашем вызове APIbody он выполнит этот раздел, если у вас нет условия if (response.status === 200)

...