Замена зависимостей в формате модуля AMD с testdouble.js
Я пишу тесты для приложения JS, используя Jasmine и testdouble.js в качестве библиотеки-макета. Я использую формат AMD для организации кода в модулях, а RequreJS в качестве загрузчика модулей. Мне было интересно, как использовать testdouble.js для замены зависимости для тестируемого модуля в формате AMD, который загружается через RequireJS. В документации нет ясности по этому поводу, или я что-то упускаю, так что если кто-то может указать мне правильное направление.
Ниже я приведу пример, который иллюстрирует мои настройки и проблемы, с которыми я сталкиваюсь.
car.js
define("car", ["engine"], function(engine) {
function drive = {
engine.run();
}
return {
drive: drive
}
});
engine.js
define("engine", function() {
function run() {
console.log("Engine running!");
}
return {
run: run
}
});
car.spec.js
define(["car"], function(car) {
describe("Car", function() {
it("should run the motor when driving", function() {
// I am not sure how to mock the engine's object run method
// and where to place that logic, in beforeEach or...
td.replace(engine, "run");
car.drive();
// How to verify that when car.run() has executed, it calls this mocked method
td.verify(engine.run());
});
});
});
1 ответ
testdouble.js не имеет явной поддержки модулей AMD. Единственные трюки, связанные с модулями, которые он предлагает, являются специфичными для Node.js и построены поверх загрузчика модулей CJS Node.
Что вам нужно сделать в этом случае, это потребовать от теста ссылку на engine
и заменить run
свойство, которое, кажется, вы сделали (ваш пример неполон).
Если вы делаете это, не забудьте запустить td.reset()
в afterEach
восстановить первоначальные свойства на все, что вы замените!