console.log
не хранит записи сообщений, которые регистрируются, или генерируют события, которые вы можете прослушать.Ваши тесты не могут напрямую проверить свой вывод из JavaScript.Вместо этого ваш тестовый код должен будет заменить console.log
реализацией mock , которая отслеживает сообщения журнала для последующей проверки.
Mocking - это общая функция, поддерживаемая большинством тестовых сред JavaScript,Например, инфраструктура тестирования Jest предоставляет jest.spyOn
функцию , которая заменяет данный метод фиктивной реализацией, которая записывает аргументы для каждого вызова в свойстве .mock
перед их передачей.на оригинальной реализации.После каждого теста вы можете вызвать jest.clearAllMocks()
, чтобы сбросить списки записанных аргументов для следующего теста, или использовать эквивалентную clearMocks: true
опцию конфигурации .
function saySomething() {
console.log("Hello World");
}
jest.spyOn(console, 'log');
test("saySomething says hello", () => {
expect(console.log.mock.calls.length).toBe(0);
saySomething();
expect(console.log.mock.calls.length).toBe(1);
expect(console.log.mock.calls[0][0]).toBe("Hello World");
});
afterEach(() => {
jest.clearAllMocks();
});
Если вы не используете тестовый фреймворк (вам, вероятно, следует), вы можете сами создать простой макет.
function saySomething() {
console.log("Hello World");
}
function testSomething() {
// Replace console.log with stub implementation.
const originalLog = console.log;
const calls = [];
console.log = (...args) => {
calls.push(args);
originalLog(...args);
};
try {
console.assert(calls.length == 0);
saySomething();
console.assert(calls.length == 1);
console.assert(calls[0][0] == "Hello World");
} catch (error) {
console.error(error);
} finally {
// Restore original implementation after testing.
console.log = originalLog;
}
}