作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 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
仍然是模拟版本而不是模块的实际版本。这是为什么?我怎样才能让它成为实际版本,而不是模拟版本?
最佳答案
您仍然在第二次测试中获得了模拟的 utils 模块,因为您实际上在手动模拟 (__mocks__/utils.js
) 中需要它,它在 Jest 的缓存中仍被引用为由于 jest.mock()
而应返回的模拟。处于最高范围。
修复它的一种方法是不在手动模拟中使用该模块,或者更新您的第二个测试以取消模拟并需要它的新版本。例如:
test('get image', () => {
jest.unmock('./utils')
const utils = require.requireActual('./utils')
// `utils` is now the original version of that module
expect(utils.getImage('note.png')).toBe('note')
})
关于javascript - 在 Jest 测试中,使用 requireActual 不需要模块的实际版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52143961/
我有一个 Jest 测试文件,如下所示: // utils.test.js let utils = require('./utils') jest.mock('./utils') test('prin
我是一名优秀的程序员,十分优秀!