Javascript 使用rewire with Jest,监视私有函数中使用的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

我在一个文件中有一个私有函数,它使用console.log。我想在测试中检查console.log是否确实运行。因此,要访问私有函数,我使用

我有以下文件:

// 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();
});