jest 测试 console.log

Devrsi0n • 
更新于 

jest 是个简单好用的单测工具,最近在写算法实现时遇到了测试 console.log 入参的问题,官方文档没有直接给出解决办法,但是用 jest.fn() 来模拟 console.log 可以轻松解决这个问题。废话不多说,show code。

Code

ts
1let originalLog: any;
2let originalWarn: any;
3let originalError: any;
4
5// 所有测试用例运行前
6beforeAll(() => { // 可以换成 beforeEach
7 // 保留原 console 函数引用
8 originalLog = global.console.log;
9 originalWarn = global.console.warn;
10 originalError = global.console.error;
11
12 // 用 jest.fn() 替换,方便模拟
13 global.console.log = jest.fn();
14 global.console.warn = jest.fn();
15 global.console.error = jest.fn();
16});
17
18// 所有测试用例运行之后
19afterAll(() => { // 可以换成 afterEach
20 // 恢复原 console 函数引用
21 global.console.log = originalLog;
22 global.console.warn = originalWarn;
23 global.console.error = originalError;
24});
25
26// demo
27test('console.log', () => {
28 console.log('123'); // 替换成你要测试的函数或者方法
29 expect(global.console.log).toHaveBeenCalledWith('123');
30});

⚠ 最好要在测试用例运行之后恢复原有的 console 的引用,避免别的测试用例执行不正确。

结论

除了 console,很多 node 自身的模块都可以用 jest 相关 mock 函数模拟测试,非常方便,参考文档

在 GitHub 上编辑此文

其他文章

Web 开发中文字体指南

选择正确的中文字体

2019-01-05
© 2019 – 2020 devrsi0n
Link to $https://bit.ly/2NcAZQZLink to $https://github.com/devrsi0nLink to $https://weibo.com/qianmofeiyu