【发布时间】:2021-01-17 18:03:32
【问题描述】:
我试图监视 useState React 钩子,但我总是测试失败
这是我的 React 组件:
const Counter= () => {
const[counter, setCounter] = useState(0);
const handleClick=() => {
setCounter(counter + 1);
}
return (
<div>
<h2>{counter}</h2>
<button onClick={handleClick} id="button">increment</button>
</div>
)
}
counter.test.js:
it('increment counter correctlry', () => {
let wrapper = shallow(<Counter/>);
const setState = jest.fn();
const useStateSpy = jest.spyOn(React, 'useState');
useStateSpy.mockImplementation((init) => [init, setState]);
const button = wrapper.find("button")
button.simulate('click');
expect(setState).toHaveBeenCalledWith(1);
})
不幸的是,这不起作用,我得到了测试失败的消息:
expected 1
Number of calls: 0
【问题讨论】:
-
我同意你的问题更简单。但是,只需在 stackoverflow 中搜索 'mock usestate' 并查看有关此的许多其他问题。链接问题中您的问题的答案也可能适用。
-
好吧,有一条关于要点的评论说它可以工作gist.github.com/agiveygives/…你只需要使用
React.useState() -
评论说使用
React.useState()而不是导入{ useState } from 'react' -
另外,你在嘲笑useState,所以你不应该期望它真正更新状态,你只能检查它是否被调用
-
我真的不知道,让我研究一下原因,我会添加答案,以便以后来的人可以学到新的东西
标签: javascript reactjs testing jestjs enzyme