很遗憾,我找不到我的问题的答案。如果它已经存在,可能有人可以推荐我。
我在 React 组件中使用模拟函数进行多个测试时遇到问题。
例如组件 Login 包含名为 useAuthState
的钩子,在我的测试中,我像这样模拟它:
jest.mock('../state/useAuthState', () =>
jest.fn(() => (require('./useAuthStateTest').default as any)()))
const renderLogin = () => {
const Login = require('../components/Login').default
return render(<Login />)
}
test('some test 1' () => {
renderLogin()
})
test('some test 2' () => {
renderLogin()
})
第一个测试 some test 1
执行成功,但 some test 2
抛出错误:
TypeError: (0 , _useAuthState.default) 不是函数或其 返回值不可迭代
如果我将 some test 1
注释掉,那么 some test 2
将通过。为什么我不能在组件内模拟多个测试的功能?我在文档中遗漏了什么?
答案 0 :(得分:0)
我发现了问题,
而不是使用此代码:
jest.mock('../state/useAuthState', () =>
jest.fn(() => (require('./useAuthStateTest').default as any)()))
需要替换成这个:
jest.mock('../state/useAuthState', () =>
require('./useAuthStateTest').default)
它适用于一个文件中的多个测试。
总结一下这种方法(如 Internet 上的 tutorial 中描述的)对于一个文件中的多个测试不起作用(模拟 React 组件中的函数):
jest.mock('something_to_mock', () =>
jest.fn(() => ...))
如果我们替换为这个代码:
jest.mock('something_to_mock', () =>
(() => ...))
它会起作用。
不知道为什么。也许对reactjs非常了解的人可以解释一下。
要复制这个问题,你可以使用这个简单的测试项目: