如何防止我的Winston记录器污染笑话测试?

时间:2019-06-23 22:15:44

标签: logging jestjs winston

我正在用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');

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

谢谢!

1 个答案:

答案 0 :(得分:0)

在测试中,您可以使用模拟来模拟winton的行为,长话短说,您可以创建仅假装日志记录的Int.(Int, Float) -> Int winston模块。

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

__mocks__/winston.js

检查Jest manual以获得更多信息,或者如果您是新来的模拟支票thisthis