You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NPM Jest中Mock/监视SLF4J Logger?

用Jest测试SLF4J Logger的实现步骤

1. 安装必要依赖

先给项目安装SLF4J的JS实现包和Jest测试工具:

npm install slf4js --save
npm install jest --save-dev

如果用TypeScript开发,额外安装类型声明包:

npm install @types/slf4js @types/jest --save-dev

2. 修正原代码的问题

你的原代码存在导出不匹配、未导入Logger的问题,先修正为可运行的版本:

// logfuntest.js
// 导入SLF4J并获取Logger实例
const logger = require('slf4js').getLogger('MyLogger');

function someLoggerFunction() {
  logger.log("some important logs");
}

// 导出与定义一致的函数
module.exports = someLoggerFunction;

3. 两种Mock/监视Logger的测试方案

方案一:Mock整个SLF4J模块

直接Mockslf4js模块,让它返回带有Mock方法的Logger实例,测试函数是否正确调用日志方法:

// logfuntest.test.js
const someLoggerFunction = require('./logfuntest');
const slf4js = require('slf4js');

// Mock slf4js的getLogger方法,返回带mock log的对象
jest.mock('slf4js', () => ({
  getLogger: jest.fn(() => ({
    log: jest.fn()
  }))
}));

describe('someLoggerFunction', () => {
  it('调用函数时会触发logger.log并传入正确消息', () => {
    // 获取mock出来的Logger实例
    const mockLogger = slf4js.getLogger.mock.results[0].value;
    
    // 执行被测函数
    someLoggerFunction();
    
    // 断言log方法的调用情况
    expect(mockLogger.log).toHaveBeenCalledTimes(1);
    expect(mockLogger.log).toHaveBeenCalledWith("some important logs");
  });
});

方案二:监视已存在的Logger实例

如果不想Mock整个模块,可以直接监视Logger的log方法:

// logfuntest.test.js
const someLoggerFunction = require('./logfuntest');
const logger = require('slf4js').getLogger('MyLogger');

describe('someLoggerFunction', () => {
  it('调用函数时会触发logger.log并传入正确消息', () => {
    // 监视log方法,替换为mock实现
    const logSpy = jest.spyOn(logger, 'log').mockImplementation(() => {});
    
    // 执行被测函数
    someLoggerFunction();
    
    // 断言调用情况
    expect(logSpy).toHaveBeenCalledTimes(1);
    expect(logSpy).toHaveBeenCalledWith("some important logs");
    
    // 恢复原方法,避免影响其他测试用例
    logSpy.mockRestore();
  });
});

4. 运行测试

在package.json中添加测试脚本:

{
  "scripts": {
    "test": "jest"
  }
}

然后执行命令运行测试:

npm test

内容的提问来源于stack exchange,提问作者Gajendra Kumar Sahu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 00:43:28