#node.js #testing #mocha.js #stub #spy
Вопрос:
Пожалуйста, помогите мне! Я ломал голову, но не могу понять, как мне заглушить переменную! Я ошибаюсь? Должен ли я использовать Шпиона?
Как я должен протестировать этот код
module.exports = async () => {
var variable = 'something';
var taskProcessor = require('taskprocessor');
try {
taskProcessor(variable).then().catch();
//blah blah
//blah blah
//blah blah
//blah blah
} catch (error) {
console.log(err);
}
};
Комментарии:
1. Добро пожаловать в SO! Если эта переменная является чисто локальной для функции, какой смысл ее заглушать? Обычно вы отслеживаете только детали/макет/заглушку, не относящиеся к реализации, такие как параметры и зависимости библиотек, вызываемые функцией, которую вы тестируете.
2. кроме того, это не тот способ, которым вы обрабатываете ошибку, console.log(err) никогда не будет достигнут, если вы поместили его туда только ради taskProcessor
Ответ №1:
Прежде всего, вы должны знать, что такое заглушка или шпион (я намеренно исключил насмешки)
Мы используем двойники для управления поведением метода, а затем меняем направление теста, чтобы охватить все пути в нашем тесте.
Шпион обволакивает функцию, он не заменяет ее функциональность! Но с помощью заглушки мы можем определить результат. Шпион буквально посылает шпиона внутрь ваших врагов (в данном случае ваш код :D), чтобы имитировать поведение подлинной сущности и собирать информацию для вас!
а теперь давайте вернемся к вашему вопросу!
В этом случае вы можете использовать модуль rewire. С его страницы git
rewire добавляет специальный сеттер и геттер в модули, чтобы вы могли изменять их поведение для лучшего модульного тестирования. Вы можете
- внедряйте насмешки для других модулей или глобалов, таких как process
- проверьте частные переменные
- переопределите переменные внутри модуля.
Таким образом, вы можете установить любую переменную следующим образом: