reactjs - 为什么 jest.isolateModules 没有按预期工作?
问题描述
我想停止使用,jest.resetModules
因为我想重置两个模块,但在所有运行中保留一个。
我原来的代码让事情像这样工作很糟糕:
beforeEach(() => {
jest.resetModules();
require('hooks/useMyProvider');
const useMyProvider = require('#/');
api = useMyProvider(); // scoped above
})
然后在每次测试中,我会做这样的事情:
// Mock hook since we can't spy on a function
jest.doMock('#/hooks/useActive', () => {
return () => {
return [true]
}
});
// re-require the component that requires useActive so it pulls latest mock
let MyComponent = require('#/components/MyComponent')
const { container } = render(<MyComponent />);
我尝试重构为useMyProvider
在文件顶部定义一次并jest.resetModules
从beforeEach
;
然后我这样做了:
let MyComponent;
jest.isolateModules(() => {
jest.doMock('#/hooks/useActive', () => {
return () => {
return [true]
}
});
MyComponent = require('#/components/MyComponent')
});
const { container } = render(<MyComponent />);
当我在两次测试中这样做并在返回时换掉时true
,false
无论哪个测试先到都会坚持下去。我希望它每次都会改变,因为我已经隔离了模块。
解决方案
推荐阅读
- javascript - 如何在 DOM 中不可用时操作 localStorage 项目
- python - 向 Python 字典添加重复键(“Two Sum”问题)
- excel - 使用名称包含特定单词的 VBA 取消隐藏工作表名称
- sqlite - 如何检查隐藏的损坏
- mysql - 内部联接从子表中的外键获取“名称”属性
- r - R- 维恩图的三个向量(或数据框列)中每一个的唯一和常见项目
- spring - 为什么@Cacheable 在第二次调用方法后不起作用
- python-3.x - 将数据发布到 Google 表格中的新行(Python)
- c# - System.Net.Mail - 无法向用户发送电子邮件 - 收到“交易失败:服务器响应为 [此处的域名]”错误消息
- mongodb - 需要避免重命名 90GB 的大型 mongo 数据库。我可以将一个数据库名称代理到服务器上的另一个数据库名称吗?