【问题标题】:How can i prevent my winston logger to pollut jest tests?如何防止我的 winston 记录器污染笑话测试?
【发布时间】:2019-11-05 18:15:18
【问题描述】:

我正在使用 jest 测试我的应用程序,但我的记录器存在一个小问题:它在测试路由时不断发送控制台日志。

我正在为我的记录器处理基本的winston 配置:

logger.config.js

const winston = require('winston');
const { env } = require('./variables.config.js');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

if (env === 'development') {
  logger.add(new winston.transports.Console({
    format: winston.format.simple()
  }));
}

logger.stream = {
  write: (message) => {
    logger.info(message.trim());
  }
};

module.exports = logger;

index.js

const app = require('./config/express.config');
const logger = require('./config/logger.config');

const server = app.listen(port, logger.info(`Running on port ${port} (${env})`));

module.exports = server;

我在测试中使用server 以及supertest

some.test.js

const request = require('supertest');
const app = require('../../config/express.config');

...而且,是的...每个请求都会在我的控制台上显示我不想要的日志。如何防止我的记录器在测试我的应用时显示消息?

提前致谢!

【问题讨论】:

    标签: logging jestjs winston


    【解决方案1】:

    在测试中,你可以使用 mocks 来模拟 winton 的行为,长话短说你可以创建 dummywinston 模块,它只假装日志记录。

    您可以在项目根目录的 __mocks__ 文件夹中为 winston 定义自定义模拟(在 jest config 中定义!)。因此,您可以使用您使用的模拟函数创建__mocks__/winston.js,并且 Jest 会自动加载此模块以进行测试。您还可以为您的模拟指定自定义路径:

    jest.mock('foo', () => jest.requireActual('../some/another/folder/foo.js'));

    查看Jest manual 了解更多信息,或者如果您是新来的模拟检查thisthis

    【讨论】:

      猜你喜欢
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      • 2018-12-23
      • 2014-10-19
      • 1970-01-01
      • 2023-01-20
      相关资源
      最近更新 更多