jest 是个简单好用的单测工具,最近在写算法实现时遇到了测试 console.log
入参的问题,官方文档没有直接给出解决办法,但是用 jest.fn()
来模拟 console.log
可以轻松解决这个问题。废话不多说,show code。
Code
ts1let originalLog: any;2let originalWarn: any;3let originalError: any;45// 所有测试用例运行前6beforeAll(() => { // 可以换成 beforeEach7 // 保留原 console 函数引用8 originalLog = global.console.log;9 originalWarn = global.console.warn;10 originalError = global.console.error;1112 // 用 jest.fn() 替换,方便模拟13 global.console.log = jest.fn();14 global.console.warn = jest.fn();15 global.console.error = jest.fn();16});1718// 所有测试用例运行之后19afterAll(() => { // 可以换成 afterEach20 // 恢复原 console 函数引用21 global.console.log = originalLog;22 global.console.warn = originalWarn;23 global.console.error = originalError;24});2526// demo27test('console.log', () => {28 console.log('123'); // 替换成你要测试的函数或者方法29 expect(global.console.log).toHaveBeenCalledWith('123');30});
⚠ 最好要在测试用例运行之后恢复原有的 console
的引用,避免别的测试用例执行不正确。
结论
除了 console,很多 node 自身的模块都可以用 jest 相关 mock 函数模拟测试,非常方便,参考文档。