如何在jest单元测试中模拟嵌套的console.error
?
我的尝试(见下文)我收到错误jest.fn() value must be a mock function or spy. Received: undefined
功能
_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()
})
})
答案 0 :(得分:1)
在这一行中,您调用函数console.error
而不是将函数传递给期望,这就是为什么您未定义,因为此fn不会返回任何内容:< / p>
expect(console.error()).toHaveBeenCalledWith('No token recieved')
而不是结果,你想要像这样传递函数:
expect(console.error).toHaveBeenCalledWith('No token recieved')
此外,由于您正在尝试模拟全局控制台功能,因此您可能需要将模拟设置更改为以下内容:
global.console.error = jest.fn()