Javascript 使用rewire with Jest,监视私有函数中使用的console.log
我在一个文件中有一个私有函数,它使用console.log。我想在测试中检查console.log是否确实运行。因此,要访问私有函数,我使用 我有以下文件:Javascript 使用rewire with Jest,监视私有函数中使用的console.log,javascript,module,jestjs,private,console.log,Javascript,Module,Jestjs,Private,Console.log,我在一个文件中有一个私有函数,它使用console.log。我想在测试中检查console.log是否确实运行。因此,要访问私有函数,我使用 我有以下文件: // a.js function b() { console.log('c'); } 我有以下测试文件,其中我使用方法将console.log替换为Jest mock函数,并确保在重新布线之前进行替换: 然而,当我运行测试时,我得到: ● Test suite failed to run logger must impl
// a.js
function b() {
console.log('c');
}
我有以下测试文件,其中我使用方法将console.log替换为Jest mock函数,并确保在重新布线之前进行替换:
然而,当我运行测试时,我得到:
● Test suite failed to run
logger must implement log, warn and error methods
如果我使用以下测试代码:
// a.test.js
const rewire = require('rewire');
const a = rewire('./a');
a.__set__('console', {
log: jest.fn(),
});
test('b', () => {
a.__get__('b')();
expect(global.console.log).toHaveBeenCalled();
});
我得到以下错误:
expect(jest.fn())[.not].toHaveBeenCalled()
jest.fn() value must be a mock function or spy.
Received:
function: [Function bound log]
在私有函数中使用console.log时,是否有任何方法可以监视它?跟踪您提供的模拟集并直接在其上断言:
const rewire = require('rewire');
const a = rewire('./a');
const logMock = jest.fn(
(...args) => console.log('logMock called with', ...args)
);
a.__set__('console', {
log: logMock,
});
test('b', () => {
a.__get__('b')();
expect(logMock).toHaveBeenCalled();
});
啊,是的,谢谢,效果很好!我相信这项技术对于其他方法做同样的事情也会很有用。
const rewire = require('rewire');
const a = rewire('./a');
const logMock = jest.fn(
(...args) => console.log('logMock called with', ...args)
);
a.__set__('console', {
log: logMock,
});
test('b', () => {
a.__get__('b')();
expect(logMock).toHaveBeenCalled();
});