Узел - Как проверить анонимный обратный вызов зависимой зависимости
Я пишу модуль nodejs, чтобы абстрагировать детали приводных двигателей, подключенных к заголовкам gpio Raspberry Pi.
Модуль узла, который я использую для связи с gpio пи - это pi-gpio
Я тестирую свой модуль с jasmine
и потому что я знаю pi-gpio
модуль, который я require
предъявляет особые требования к оборудованию, и что он не будет работать на моем ПК для разработки (потому что это не пи), я использую proxyquire, чтобы заглушить зависимость.
Рассмотрим следующий (упрощенный) модуль:
nodepibot.js
'use strict';
var gpio = require("pi-gpio");
const LOW = 0,
HIGH = 1;
const MOTOR_LEFT_ENABLE = 22,
MOTOR_LEFT_A = 16,
MOTOR_LEFT_B = 18;
var leftMotorStop = function leftMotorStop() {
gpio.write(MOTOR_LEFT_ENABLE, LOW, function (err) {
if (err) {
throw err;
}
});
};
module.exports = {
"leftMotorStop": leftMotorStop
};
И мой jasmine
спецификация:
nodepibotSpec.js
describe("Node Pibot tests", function() {
var nodepibot,
stubGpio = {
write: function() {}
};
beforeEach(function() {
var proxyquire = require('proxyquire').noCallThru();
nodepibot = proxyquire("../main/nodepibot", {'pi-gpio': stubGpio});
});
it("Should stop left motor", function() {
// Given
spyOn(stubGpio, "write");
// When
nodepibot.leftMotorStop();
// Then
expect(stubGpio.write.callCount).toBe(1);
expect(stubGpio.write).toHaveBeenCalledWith(22, 0, jasmine.any(Function));
});
});
Выше тестирует мой "счастливый путь" - IE. Я утверждаю, что когда leftMotorStop
вызывается на моем модуле, то write
метод вызывается на pi-gpio
библиотека с соответствующими параметрами.
То, что я хотел бы сделать, это проверить un-happy path
- IE. проверить анонимную функцию обратного вызова, когда err
имеет значение, и в этом случае я утверждаю, что исключение возвращается.
Кто-нибудь знает, как я поступил бы по этому поводу?
1 ответ
Просто перепишите свою функцию записи на заглушки, чтобы вызвать функцию ошибки:
var nodepibot,
stubGpio = {
write: function(var1, var2, callback) {
callback("stubbed error");
}
};