Как написать юнит-тест для настройки winston с sinon? - PullRequest
0 голосов
/ 04 апреля 2020

Я написал configure для 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()
    ]
});

Но я не знаю, как написать модульный тест для этой конфигурации.

1 Ответ

0 голосов
/ 07 апреля 2020

Вот решение для модульного тестирования с использованием 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 |                   
-----------|---------|----------|---------|---------|-------------------
...