如何在模拟的Jest函数中使用var作为返回值?

时间:2019-06-12 20:18:35

标签: javascript jestjs jest-mock-axios

我目前有此代码...

const context = {};
context.response = {};
jest.mock('axios', () => ({
    defaults: {
        withCredentials: true
    },
    post: () => Promise.resolve(context.response)
}));

当我尝试跑步时,我得到...

  

babel-plugin-jest-hoist:jest.mock()的模块工厂不允许引用任何范围外的变量。

我希望能够轻松更改响应对象而无需重置和重新模拟。有什么好方法吗?

1 个答案:

答案 0 :(得分:4)

发生这种情况是因为开玩笑地babel-plugin-jest-hoist,这意味着您的所有模拟都悬挂在顶部。因此您无法访问模拟中的变量。

因为我们模拟了axios,所以当我们导入“ axios”时,我们得到了模拟版本,因此我们可以使用jest.fn()的“ mockImplementation”方法。

import axios from 'axios'

jest.mock('axios', () => ({
  defaults: {
    withCredentials: true
  },
  post: jest.fn()
}))

test('should...', () => {
  // mock post for your case
  axios.post.mockImplementation(() => {
    return true
  })
  expect(axios.post()).toBe(true)
})