Reactjs 如何使用Jest和Ezyme对useEffect清理返回函数进行单元测试
我尝试了很多场景,但都没有成功,我面临着useEffect清理返回方法的问题。寻找一些解决方案来覆盖用例。由于声誉降低,无法附加屏幕截图 我做了一些研究,并遵循提供的解决方案,如创建间谍、挂载、卸载场景。但都不管用Reactjs 如何使用Jest和Ezyme对useEffect清理返回函数进行单元测试,reactjs,jestjs,enzyme,Reactjs,Jestjs,Enzyme,我尝试了很多场景,但都没有成功,我面临着useEffect清理返回方法的问题。寻找一些解决方案来覆盖用例。由于声誉降低,无法附加屏幕截图 我做了一些研究,并遵循提供的解决方案,如创建间谍、挂载、卸载场景。但都不管用 useEffect(() => { window.addEventListener('scroll', handleScroll); window.addEventListener('resize', handleResize); return () =
useEffect(() => {
window.addEventListener('scroll', handleScroll);
window.addEventListener('resize', handleResize);
return () => {
window.removeEventListener('scroll', handleScroll);
window.removeEventListener('resize', handleResize);
};
}, []);
useEffect函数中的return语句需要测试覆盖率
请原谅输入错误-从手机上发布。React不会在同步模式下运行挂钩
从“React”导入React;
从“反应测试库”导入{cleanup,render};
每次之后(清理);
它(“反应测试”,()=>{
设a=假;
功能测试(){
React.useffect(()=>{
a=真;
});
返回你好世界;
}
const{rerender}=render();
重新加载();
期望(a)是(真的);
});代码>为了运行在useEffect钩子中指定的清理函数,您可以缓存对它的引用,然后在稍后的测试中调用该引用:
let cleanupFunc;
jest.spyOn(React, "useEffect").mockImplementationOnce(func => {
cleanupFunc = func();
});
cleanupFunc();
根据@thomas rufflo的回答,值得指出的是:
从“react”导入{useffect};
不起作用。您必须使用:
React.useffect
摘自这篇博文:
我是新的前端测试,所以这让我绊倒了一段时间 我建议您结账。该库提供了一个unmount
方法,该方法从其render
方法返回。调用unmount()
后,可以检查侦听器是否已被删除。一般来说,我非常推荐react测试库。我们将它与jest结合用于所有前端测试,它的工作方式非常有魅力
卸载方法的示例用法:
import { render } from "@testing-library/react";
it("Should do what I want", () => {
const { unmount } = render(
<MyComponent value="test" } />
);
unmount();
// ... expects
});
从“@testing library/react”导入{render}”;
它(“应该做我想做的事”,()=>{
常量{unmount}=render(
);
卸载();
//…期望
});
对于像我一样无法让公认答案生效的人:
jest.spyOn(React,“useffect”).mockImplementationOnce(cb=>cb())代码>
将第二个()
添加到回调可以执行清理。谢谢,它会同时包括onScroll和resize方法吗?将立即尝试按照您的建议尝试您的解决方案,但它仍然不包括我的用例您是否尝试了wrapper.unmount()(酶方法)?如果您能提供代码沙盒链接和您编写的测试用例,这会更好。易于修复或帮助。