我如何在每次测试中模拟和更改构造函数的实现?
我正在查看lru-cache
库,您可以将其命名为
const cache = new LRU({
max: 500,
ttl: 1000 * 60 * 15,
updateAgeOnGet: false,
updateAgeOnHas: false,
});
现在cache
变量将有一个get
和set
函数,我尝试在每个测试中只更改get
实现。到目前为止,模拟整个模块并尝试在构造函数和/或get函数上调用mockImplementation
,当测试调用我正在测试的函数时,没有反映出更改(它只有默认的模拟)
这是我尝试过的一件事
const LRU = require('lru-cache');
jest.mock('lru-cache');
在我的测试文件中
it('should blah blah', () => {
LRU.mockImplementation(() => ({
get: jest.fn().mockImplementation(data => ({
response: data,
})),
set: jest.fn()
}));
// call function in a file that uses lru-cache
});
我还尝试不直接模拟get
函数来模拟构造函数,
然而,在我的所有尝试中,当我在代码中记录从构造函数返回的对象时,这是对模块的默认模拟,但get
实现并不存在。
现在,如果我调用并在测试文件(而不是使用它的方法)中记录类似的内容,
cache.get.mockImplementation(identifier => ({
response: identifier,
}));
它确实显示了变化。所以看起来mockImplementation
不能坚持
任何帮助都将不胜感激,谢谢
1条答案
按热度按时间zphenhs41#
试着在测试之外像这样模拟它。如果不需要的话,你可以删除
requireActual
。您也可以检查您的
Jest
配置是否默认启用了模拟重置选项。或者只是在您的package.json
中添加以下内容: