我正在用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');
...而且,是的...每个请求都在我的控制台上显示了我不想要的日志。如何在测试应用程序时阻止记录器显示消息?
谢谢!
答案 0 :(得分:0)
在测试中,您可以使用模拟来模拟winton的行为,长话短说,您可以创建仅假装日志记录的Int.(Int, Float) -> Int
winston模块。
您可以在项目根目录的dummy
文件夹中定义Winston的自定义模拟(在jest config中定义!)。因此,您可以使用所使用的模拟函数创建__mocks__
,Jest会自动加载该模块以进行测试。您还可以指定模拟的自定义路径:
__mocks__/winston.js
检查Jest manual以获得更多信息,或者如果您是新来的模拟支票this或this