gpt4 book ai didi

javascript - JS : How to mock a nested function in a jestJS unit test?

转载 作者:行者123 更新时间:2023-12-03 03:04:08 25 4
gpt4 key购买 nike

如何在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com