我目前有此代码...
const context = {};
context.response = {};
jest.mock('axios', () => ({
defaults: {
withCredentials: true
},
post: () => Promise.resolve(context.response)
}));
当我尝试跑步时,我得到...
babel-plugin-jest-hoist:
jest.mock()
的模块工厂不允许引用任何范围外的变量。
我希望能够轻松更改响应对象而无需重置和重新模拟。有什么好方法吗?
答案 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)
})