如何在 Jest 单元测试中模拟嵌套的 console.error
?
通过我的尝试(见下文),我确实得到了错误 jest.fn() 值必须是模拟函数或 spy 。收到:未定义
函数
_onSubmit = (event) => {
event.preventDefault()
const { username, password } = this.state
return this.props.createUserMutation({
variables: { username, password }
}).then(response => {
const token = response.data.createUser.token
if (token) {
// do something
} else {
console.error('No token recieved')
}
})
}
测试
it('_onSubmit() should log error, if no token is recieved', (done) => {
console['error'] = jest.fn()
const createUserMutation = () => {
return Promise.resolve({
data: {
createUser: { token: undefined }
}
})
}
const wrapper = shallow(<CreateAccount
createUserMutation={createUserMutation}
/>)
wrapper
.update()
.find(Form)
.props()
.onSubmit({ preventDefault: () => {} })
.then(() => {
expect(console.error()).toHaveBeenCalledWith('No token recieved')
done()
})
})
最佳答案
在这一行中,您调用函数 console.error
而不是将函数传递给预期,这就是为什么您未定义,因为此 fn 不会返回任何内容:
expect(console.error()).toHaveBeenCalledWith('未收到 token ')
您想要传递函数本身,而不是结果:
expect(console.error).toHaveBeenCalledWith('未收到 token ')
此外,由于您正在尝试模拟全局控制台功能,因此您可能必须将模拟设置更改为以下内容:
global.console.error = jest.fn()
关于javascript - JS : How to mock a nested function in a jestJS unit test?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47247060/