您好,我想模拟 lib winston 以了解是否要测试我的实例,但我不知道这是否可行或者我是否走在正确的道路上,因此如果有人可以帮助我,我将不胜感激:
温斯顿实例:
import winston, { createLogger, transports, format } from 'winston'
winston.addColors({
error: 'red',
warn: 'yellow',
info: 'green',
http: 'magenta',
debug: 'white',
})
const levels = {
error: 0,
warn: 1,
info: 2,
http: 3,
debug: 4,
}
const env = process.env.NODE_ENV || 'development';
export const logger = createLogger({
level: env === 'development' ? 'debug' : 'info',
levels,
format: format.combine(
format.label({ label: 'right meow!' }),
format.colorize({ all: true }),
format.json(),
format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }),
format.printf((info) => `${info.timestamp} ${info.level}: ${info.message}`),
),
transports: [
new transports.File({
filename: 'logging/errors.log',
level: 'error',
maxsize: 5242880,
format: format.json(),
}),
new transports.File({
filename: 'logging/combined.log',
level: 'info',
maxsize: 5242880,
}),
new transports.Console(),
],
})
到目前为止,我尝试使用 winston 执行以下操作,但没有成功,我的测试未通过:
import { createLogger, format, Logger, transports } from 'winston'
import { logger } from './logger-helper'
jest.mock('winston', () => ({
levels: jest.fn(),
format: {
colorize: jest.fn(),
combine: jest.fn(),
label: jest.fn(),
timestamp: jest.fn(),
printf: jest.fn(),
json: jest.fn(),
},
createLogger: jest.fn(() => {
info: jest.fn()
}),
transports: {
Console: jest.fn(),
File: jest.fn(),
},
addColors: jest.fn(),
}))
describe('logger', () => {
afterEach(() => {
jest.resetAllMocks()
})
it('should pass', () => {
expect(createLogger).toBeCalledTimes(1)
})
})
我的createlogger没有被调用,没有通过:
expect(jest.fn()).toBeCalledTimes(expected)
Expected number of calls: 1
Received number of calls: 0