Я новичок в шутке и столкнулся с чем-то странным:
Я получил этот тест:
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 никогда не вызывалась. Хотя в консоли я вижу, что реализация была выполнена. Так как же реализовать реализацию, если функция никогда не вызывалась? Я что-то пропустил?