jest.resetModules()
清除所有模块的require缓存,但是有没有办法只为一个模块清除它?无法使用require.cache
因为Jest似乎绕过了它。
我正在测试有状态的Node模块(即它依赖于对require
的多次调用返回相同实例的事实)。对于我的测试,我需要重置模块的状态以测试不同的场景。 jest.resetModules()
有效,但我需要重新require
其他一些不需要重置的模拟模块。
答案 0 :(得分:2)
评论中提到的PR已合并。从v24.0.0-alpha.9开始,您现在可以使用jest.isolateModules
来完成此操作。
假设您只想重置某个模块,那么您应该在jest.isolateModules
的回调中要求该模块:
let myModule;
jest.isolateModules(() => {
myModule = require('my-certain-module');
});
答案 1 :(得分:2)
模拟模块(带有工厂)用于某些测试,并在测试文件中恢复其他模块的示例
describe("some tests", () => {
let subject;
describe("with mocks", () => {
beforeAll(() => {
jest.isolateModules(() => {
jest.doMock("some-lib", () => ({ someFn: jest.fn() })); // .doMock doesnt hoist like .mock does when using babel-jest
subject = require('./module-that-imports-some-lib');
});
});
// ... tests when some-lib is mocked
});
describe("without mocks - restoring mocked modules", () => {
beforeAll(() => {
jest.isolateModules(() => {
jest.unmock("some-lib");
subject = require('./module-that-imports-some-lib');
});
});
// ... tests when some-lib is NOT mocked
});
});