【问题标题】:follow jest docs to mock axios but not working按照 jest docs 模拟 axios 但不工作
【发布时间】:2019-04-20 19:30:17
【问题描述】:

我将开玩笑的文档流到模拟模块'axios'

喜欢这个

// httpCall.js
import axios from 'axios'
export default function httpCall () {
  return axios.get('url/to/the/end/point').then(res => res.data)
}

还有我的测试文件

import axios from 'axios'
import httpCall from './index'
jest.mock('axios')
test('mock module axios', () => {
  const resp = { data: { id: 1, name: 'John Doe' } }
  axios.mockResolvedValue(resp)
  return httpCall().then(res => expect(res).toEqual(resp.data))
})

然后得到这个错误

TypeError: _axios.default.mockResolvedValue is not a function

所以我尝试用谷歌搜索,然后尝试Mock inner axios.create()

创建模拟/axios-mock.js

const mockAxios = jest.genMockFromModule('axios')
mockAxios.create = jest.fn(() => mockAxios)
export default mockAxios

然后将我的测试文件更新为此

import mockAxios from './__mocks__/axios-mock'
import httpCall from './index'
test('mock module axios', () => {
  const resp = { data: { id: 1, name: 'John Doe' } }
  mockAxios.get.mockResolvedValue(resp)
  return httpCall().then(res => expect(res).toEqual(resp.data))
})

但仍然出现如下错误

Request failed with status code 404

我对此一无所知......但最终我让它工作......

这是我的模拟文件

// __mocks__/axios-mock.js
import axios from 'axios'
const mockAxios = jest.genMockFromModule('axios')
export default axios

// or even like this
import axios from 'axios'
jest.mock('axios')
export default axios

这是我的测试文件

import httpCall from './index'
import mockAxios from './__mocks__/axios-mock'

describe('mock module', () => {
  it('axios should be mocked', () => {
    const resp = { data: { id: 1, name: 'John Doe' } }
    mockAxios.get = jest.fn().mockResolvedValue(resp)
    return httpCall().then(res => expect(res).toEqual(resp.data))
  })
})

之后,我尝试将 axios-mock 代码移动到如下所示的测试文件中

import axios from 'axios'
import httpCall from './index'
const mockAxios = jest.genMockFromModule('axios')

describe('mock module', () => {
  it('axios should be mocked', () => {
    const resp = { data: { id: 1, name: 'John Doe' } }
    mockAxios.get = jest.fn().mockResolvedValue(resp)
    return httpCall().then(res => expect(res).toEqual(resp.data))
  })
})

我又遇到了这个错误

Request failed with status code 404

这是我的环境信息

System:
    OS: macOS 10.14
    CPU: (4) x64 Intel(R) Core(TM) i5-7360U CPU @ 2.30GHz
  Binaries:
    Node: 10.13.0 - ~/.nvm/versions/node/v10.13.0/bin/node
    Yarn: 1.7.0 - /usr/local/bin/yarn
    npm: 6.4.1 - ~/.nvm/versions/node/v10.13.0/bin/npm
  npmPackages:
    jest: ^23.6.0 => 23.6.0

我的.babelrc

{
  "presets": [
    [
      "@babel/env",
      {
        "modules": "umd"
      }
    ]
  ]
}

我的 jest.config.js

module.exports = {

}

希望有人能解释一下为什么会这样

jest mock module document 真的有效吗?

【问题讨论】:

    标签: javascript testing mocking axios jestjs


    【解决方案1】:

    现在它可以工作了,问题是我的 .babelrc 文件

    应该这样

    {
      "presets": [
        [
          "@babel/env"
        ]
      ]
    }
    

    {
      "presets": [
        [
          "@babel/env",
          {
            "modules": "umd"
          }
        ]
      ],
      "env": {
        "test": {
          "presets": [
            [
              "@babel/env"
            ]
          ]
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-07-21
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      相关资源
      最近更新 更多