如何用玩笑和打字稿模拟库

时间:2021-04-02 18:46:16

标签: typescript jestjs

您好,我想模拟 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

0 个答案:

没有答案