Я пытался прочитать написание методов тестирования для пустых модулей, где есть побочный эффект.
Кажется, я не могу реализовать свою реализацию в моем сценарии, где у меня есть модуль, который принимает массив логгеров. Это позволяет клиенту реализовать несколько источников ведения журнала в определенных сценариях, таких как использование консоли и ведение журнала в постоянном хранилище ведения журнала (при необходимости несколько источников).
У меня есть уровень абстракции, который отображается через конкретные источники с тем же контрактом.
Класс, абстрагирующийся от конкретных классов, имеет некоторую логику, чтобы знать, какие методы нужно вызывать, и я хочу проверить, является ли эта логика надежной, но я не уверен, как это сделать. Поскольку эти методы недействительны, я прав, думая, что мне может потребоваться вызвать .toHaveBeenCalled , чтобы проверить наличие этих побочных эффектов?
Инициализировать регистратор
ЦСИ / index.js
import logger from "./logger";
logger.init([console]);
logger.debug("Hello debug");
Logger
src / logger.js - абстракция, ожидающая массив бетонов
function init(loggers) {
...
}
function debug(message) {
writeToLogs(loggers, message, "debug");
}
function writeToLogs(loggers, message, type) {
// I want to test this logic - multiple loggers and different calls mapped correctly
loggers.forEach(logger => {
switch (type) {
case "debug":
logger.debug(message);
break;
...
}
}
}
module.exports = {
init: init,
debug: debug,
...
}
Консольный логгер
src / logger / console.js - пример конкретного
function debug(message) {
console.debug(message);
}
module.exports = {
debug: debug,
...
}
Test
Тесты / logger.test.js
import logger from "../../src/logger";
test("logger writes information", () => {
// What should I do here?
});
Консольный модуль просто пишет в консоль. На мой взгляд, я не думаю, что необходимо тестировать, если это не изменится в будущем. Если бы я должен был проверить это, как я могу убедиться, что консоль была записана? Я бы воспринял это как интеграционный тест, поскольку это фактическая реализация, которая интегрируется с консолью браузера.
Я использую webpack 4.6.0 на узле 9.5.0 с jest 22.4.3.