Узел - Как проверить анонимный обратный вызов зависимой зависимости

Я пишу модуль 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");
        }
    };
Другие вопросы по тегам