Реализация Jest выполняется, но функция никогда не вызывается - PullRequest
0 голосов
/ 02 мая 2018

Я новичок в шутке и столкнулся с чем-то странным:

Я получил этот тест:

let mockedLogger = require('../util/testLogger');
jest.mock('../../handler/util/winstonLogHandler', () => {
    return {
        getLogger: function() {
            return mockedLogger;
        },
    };
});

const sendMock = jest
    .fn()
    .mockImplementationOnce(() => {
        return new Promise(function(resolve, reject) {
            resolve('something');
        });
    })
    .mockImplementationOnce(() => {
        return new Promise(function(resolve, reject) {
            reject('some error');
        });
    });
const message = {
    channel: {
        send: sendMock,
    },
};

const ping = require('../.././commands/util/ping');

describe('Testing the ping command', () => {
    test('it should have properties', () => {
        expect(ping.name).not.toBe(undefined);
        expect(ping.name).not.toBe(undefined);
        expect(ping.name).not.toBe(undefined);
    });
    describe('it should execute', () => {
        test('and send a message', () => {
            ping.execute(null, message);
            expect(sendMock).toBeCalled();
        });
        test('or log an error', () => {
            ping.execute(null, message);
            expect(mockedLogger.error).toBeCalledWith(`Ping: Error sending message: some error`);
        });
    });
});

testLogger:

const errorLogMock = jest
    .fn()
    .mockImplementation((log) => console.error(log))
    .mockName('errorLog');

module.exports = {
    error: errorLogMock,
};

для этого модуля:

const winstonLogHandler = require('../../handler/util/winstonLogHandler');
const logger = winstonLogHandler.getLogger();

module.exports = {
    name: 'ping',
    description: 'pong!',
    disabled: false,
    requireDB: false,
    execute(client, message) {
        message.channel.send('pong!').catch(error => {
            logger.error(`Ping: Error sending message: ${error}`);
        });
    },
};

Теперь, если я выполняю тест, я получаю сообщение об ошибке, что моя функция logError Mock никогда не вызывалась. Хотя в консоли я вижу, что реализация была выполнена. Так как же реализовать реализацию, если функция никогда не вызывалась? Я что-то пропустил?

1 Ответ

0 голосов
/ 05 мая 2018

изменение теста на:

describe('Testing the ping command', () => {
    test('it should have properties', () => {
        expect(ping.name).not.toBe(undefined);
        expect(ping.name).not.toBe(undefined);
        expect(ping.name).not.toBe(undefined);
    });
    describe('it should execute', () => {
        test('and send a message', () => {
            await ping.execute(null, message);
            expect(sendMock).toBeCalled();
        });
        test('or log an error', () => {
            await ping.execute(null, message);
            expect(mockedLogger.error).toBeCalledWith(`Ping: Error sending message: some error`);
        });
    });
});

решил проблему. У Jest не было вызова функции, потому что асинхронный код не был завершен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...