1

我目前有这个代码...

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

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

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

我希望能够轻松更改响应对象而无需重置和移除。有没有好的方法来做到这一点?

4

1 回答 1

4

发生这种情况是因为 jest use 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)
})
于 2019-06-12T21:05:06.877 回答