Jest фиктивные значения, возвращаемые функцией - PullRequest
0 голосов
/ 16 июня 2020

У меня есть файл журнала, как показано ниже, который реализует функцию ведения журнала. uuidLogger. js

const winston = require('winston'),
    CustomTransport = require('./customTransport');

function getLogger(route) {
    return winston.createLogger({
        defaultMeta: { route },
        transports: [new CustomTransport()]
    });
}
module.exports = getLogger;

Он импортируется такой функцией и используется для ведения журнала testfn. js

const uuidLogger = require('./uuidLogger')('test-fn');

function testMock() {
    uuidLogger.info('Hey I am just logging');
}

module.exports = { testMock };

Я пытаюсь имитировать uuidlogger в testfn. js, чтобы я мог отслеживать различные методы, вызываемые объектом uuidLogger. Я пробовал следующий подход.

import { testMock } from './testfn';
import getLogger from './uuidLogger';
const logger = getLogger('testfn');

jest.mock('./uuidLogger', () =>
    jest.fn(() => ({
        info: jest.fn(() => console.log('Mocked function actually called'))
    }))
);
it('verify that info method was called on returned object', () => {
    testMock('abx');
    expect(logger.info).toBeCalledTimes(1);
});

Он смог имитировать вызываемый метод, однако фиктивная информация не отражается в объекте logger.info.

Я также пробовал подход ниже

import { testMock } from './testfn';
import getLogger from './uuidLogger';
jest.mock('./uuidLogger', () =>
    jest.fn(() => ({ info: jest.fn(() => console.log('Top level fn')) }))
);
const logger = {
    error: jest.fn(),
    info: jest.fn(() => {
        console.log('Overwritten fn');
    })
};

getLogger.mockReturnValue(logger);

it('shud return Winston instance', () => {
    testMock('abx');
    expect(logger.info).toBeCalledTimes(1);
});

Любая помощь о том, как ее получить, будет оценена. Заранее спасибо.

1 Ответ

0 голосов
/ 18 июня 2020

Похоже, что утверждение не выполняется для правильной переменной.

Необходимо утверждать getLogger

Ваш первый подход к написанию тестового примера правильный. * Добавьте утверждение примерно так:

 expect(getLogger.mock.results[0].value.info).toBeCalledTimes(1);
...