gpt4 book ai didi

node.js - 用 Jest 重置单个模块

转载 作者:IT老高 更新时间:2023-10-28 22:05:48 26 4
gpt4 key购买 nike

jest.resetModules() 清除所有模块的 require 缓存,但有没有办法只为单个模块清除它?无法使用 require.cache,因为 Jest 似乎绕过了它。

我正在测试一个有状态的 Node 模块(即它依赖于对 require 的多次调用返回相同实例的事实)。对于我的测试,我需要重置模块的状态以测试不同的场景。 jest.resetModules() 有效,但我需要重新require 其他一些不需要重置的模拟模块。

最佳答案

正如问题中所解释的,jest.resetModules() 重置模块缓存,这对您的模块保持某些本地状态并且您希望在测试之间摆脱该状态很有用。

resetModules 的问题在于它会重置所有内容,但有时您只想重置某些模块。

自 Jest 24 起,您现在可以使用 jest.isolateModules这样做。

假设你有一个保持状态的模块:

模块.js

exports.a = 1
exports.add = function (a) {
return exports.a += a;
}

module.test.js

test('adds 1 to counter', () => {
jest.isolateModules(() => {
const myModule = require('./module');
expect(myModule.add(1)).toBe(2);
expect(myModule.add(1)).toBe(3);
});
});

test('adds 2 to counter', () => {
jest.isolateModules(() => {
const myModule = require('./module');
expect(myModule.add(2)).toBe(3);
expect(myModule.add(2)).toBe(5);
});
});

基本上在每次 jest.isolateModules() 调用之后,下次需要该模块时,它就会有一个新的状态。

关于node.js - 用 Jest 重置单个模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45571816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com