如何使用sinon配置Winston的写单元测试?

问题描述 投票:0回答:1

我写了winstin配置文件:

import {createLogger, format, Logger, transports} from "winston";

export const logger: Logger = createLogger({
    level: 'debug',
    format: format.combine(
        format.timestamp(),
        format.json()
    ),
    transports: [
        new transports.Console()
    ]
});

但是我不知道该配置如何进行单元测试。

typescript unit-testing sinon winston sinon-chai
1个回答
0
投票

这里是使用proxyquire的单元测试解决方案:

logger.ts

import { createLogger, format, Logger, transports } from 'winston';

export const logger: Logger = createLogger({
  level: 'debug',
  format: format.combine(format.timestamp(), format.json()),
  transports: [new transports.Console()],
});

logger.test.ts

import proxyquire from 'proxyquire';
import sinon from 'sinon';

describe('61027051', () => {
  it('should pass', () => {
    const winstonStub = {
      createLogger: sinon.stub(),
      format: {
        combine: sinon.stub(),
        timestamp: sinon.stub(),
        json: sinon.stub(),
      },
      transports: {
        Console: sinon.stub(),
      },
    };
    proxyquire('./logger', {
      winston: winstonStub,
    });
    sinon.assert.calledWith(winstonStub.createLogger, {
      level: 'debug',
      format: sinon.match.any,
      transports: sinon.match.array,
    });
  });
});

100%覆盖率的单元测试结果:

  61027051
    ✓ should pass (1999ms)


  1 passing (2s)

-----------|---------|----------|---------|---------|-------------------
File       | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-----------|---------|----------|---------|---------|-------------------
All files  |     100 |      100 |     100 |     100 |                   
 logger.ts |     100 |      100 |     100 |     100 |                   
-----------|---------|----------|---------|---------|-------------------
© www.soinside.com 2019 - 2024. All rights reserved.