Jest期望调用fct出现问题




我有点被jest的问题所困扰。我测试从winston调用createLogger函数的测试不会触发
由于我正在导出由createLogger的结果填充的logger变量,我不明白为什么我的expect不工作。有人能告诉我问题出在哪里吗
谢谢:D。

这是我的代码:

// Some code before
const logger = winston.createLogger({
  level: 'debug',
  format: winston.format.combine(
    winston.format.json(),
    winston.format.colorize(),
    winston.format.simple(),
  ),
  transports: process.env.NODE_ENV === 'production' ? [
    new winston.transports.Console(),
    loggingWinston, // Don't worry about this => coming from @google-cloud/logging-winston
  ] : [
    new winston.transports.Console(),
  ],
});
module.exports = logger;

我在runkit 上的测试

错误:


● default behavior with production env
    expect(jest.fn()).toHaveBeenCalledTimes(expected)
    Expected number of calls: 1
    Received number of calls: 0
      51 |   process.env.NODE_ENV = 'production';
      52 |
    > 53 |   expect(winston.createLogger).toHaveBeenCalledTimes(1);
         |                                ^
      54 | });
      55 |
      56 | test('default behavior with development env', () => {
      at Object.<anonymous> (src/lib/__tests__/logger.test.js:53:32)

无法复制。它对我有效。

logger.js:

const winston = require('winston');
const logger = winston.createLogger({
  level: 'debug',
  format: winston.format.combine(winston.format.json(), winston.format.colorize(), winston.format.simple()),
  transports:
    process.env.NODE_ENV === 'production' ? [new winston.transports.Console()] : [new winston.transports.Console()],
});
module.exports = logger;

logger.test.js:

jest.mock('winston');
const winston = require('winston');
let mockJson;
let mockColorize;
let mockSimple;
let mockCombine;
let mockConsole;
let mockTransports;
let mockFormat;
beforeEach(() => {
  mockJson = jest.fn(() => 'mock json');
  mockColorize = jest.fn(() => 'mock colorize');
  mockSimple = jest.fn(() => 'mock simple');
  mockCombine = jest.fn();
  mockConsole = jest.fn();
  mockTransports = {
    Console: mockConsole,
  };
  mockFormat = {
    json: mockJson,
    colorize: mockColorize,
    combine: mockCombine,
    simple: mockSimple,
  };
  winston.format = mockFormat;
  winston.transports = mockTransports;
  winston.createLogger.mockImplementation(() => ({ info: jest.fn() }));
  require('./logger');
});
test('default behavior', () => {
  expect(mockTransports.Console).toHaveBeenCalledTimes(1);
  expect(mockFormat.json).toHaveBeenCalledTimes(1);
  expect(mockFormat.colorize).toHaveBeenCalledTimes(1);
  expect(mockFormat.simple).toHaveBeenCalledTimes(1);
  expect(mockFormat.combine).toHaveBeenCalledTimes(1);
  expect(mockFormat.combine).toHaveBeenCalledWith('mock json', 'mock colorize', 'mock simple');
});
test('default behavior with production env', () => {
  process.env.NODE_ENV = 'production';
  expect(winston.createLogger).toHaveBeenCalledTimes(1);
});
test('default behavior with development env', () => {
  process.env.NODE_ENV = 'development';
  expect(winston.createLogger).toHaveBeenCalledTimes(1);
});

带覆盖率报告的单元测试结果:

 PASS  stackoverflow/60566915/logger.test.js (9.303s)
  ✓ default behavior (776ms)
  ✓ default behavior with production env
  ✓ default behavior with development env (1ms)
-----------|---------|----------|---------|---------|-------------------
File       | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-----------|---------|----------|---------|---------|-------------------
All files  |     100 |       50 |     100 |     100 |                   
 logger.js |     100 |       50 |     100 |     100 | 7                 
-----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       3 passed, 3 total
Snapshots:   0 total
Time:        10.625s

源代码:https://github.com/mrdulin/react-apollo-graphql-starter-kit/tree/master/stackoverflow/60566915

最新更新