我有一个Jest测试文件,如下所示:
// utils.test.js
let utils = require('./utils')
jest.mock('./utils')
test('print items', () => {
utils.printItems(['a'])
expect(utils.getImage).toHaveBeenLastCalledWith('a.png')
})
test('get image', () => {
utils = require.requireActual('./utils')
// `utils` is still mocked here for some reason.
expect(utils.getImage('note.png')).toBe('note')
})
还有这样的模拟:
// __mocks__/utils.js
const utils = require.requireActual('../utils');
utils.getImage = jest.fn(() => 'abc');
module.exports = utils;
但是,正如您在第二个测试的评论中所看到的那样,utils
仍然是模块的模拟版本,而不是模块的实际版本。这是为什么?我怎样才能使它成为实际版本,而不是模拟版本?
答案 0 :(得分:0)
在第二个测试中,您仍然获得了模拟的utils模块,因为您实际上已经在手动模拟(AsStream
)中使用了该模块,在Jest的缓存中,由于{{ 1}}是最重要的范围。
解决此问题的一种方法是不使用手动模拟中的模块,或者更新第二个测试以取消模拟并要求使用新版本。例如:
__mocks__/utils.js