如何解决陈旧的jest.mock结果? 我尝试过:手动测试:
我正在为一个React组件编写一个Jest测试,该组件需要根据当前URL中是否存在参数showModal
来设置其初始状态。我在此CodeSandbox中制作了一个简单的,人为的示例:man page。
我正在为此测试使用jest
和react-testing-library
。
由于两个原因,我在这里需要大量使用jest.mock()
:
- 要提供
window.URLSearchParams
的返回值 - 我正在测试的组件呈现了一个子组件
Modal
,该子组件需要访问React上下文。我不想处理来自该上下文的所有数据/方法,因为它与测试无关。所以我在嘲笑子组件。
您可以在src/components/__mocks__/Modal.js
上看到模拟的子组件。
在我的测试文件(src/components/__tests__/ModalNavItem.test.js
)中,我进行了两项测试:一项存在查询参数,另一项不存在。我希望模拟的子组件的输出能够反映出我正在测试的组件是否正确设置了其初始状态。
每个测试的基本断言是expect(modal.dataset.visible).toBe("false");
(或第二个测试的true
)。
如果单独运行这些测试中的每个测试都会通过,但是第二个测试在同时运行时始终会失败。因此,我认为问题在于我的模拟子组件未重置测试之间。不知道为什么。
我尝试过:
在我的beforeEach()
区块中:
-
jest.clearAllMocks();
-
jest.resetAllMocks();
-
jest.resetModules();
这些方法都无法解决问题,除非第二次测试独自运行,否则第二次测试始终会失败。
手动测试:
您可以通过在CodeSandbox浏览器中手动更改url(添加或删除?showModal=true
)来验证该组件是否确实执行了预期的操作。因此,问题肯定在我的测试中,而不是实际的应用程序中。
注意:CodeSandbox尚不支持jest.mock()
(为什么?!),因此测试套件实际上不会在其中运行。您只需要相信我的话,这些就是我在开发环境中运行测试时得到的结果。
非常感谢您的帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。