节点 - 如何测试存根依赖关系的匿名回调

时间:2016-02-19 16:04:01

标签: node.js jasmine raspberry-pi stubbing

我正在编写一个nodejs模块来抽象连接到Raspberry Pi的gpio标题的驱动电机的细节。
用于与pi的gpio通信的节点模块是pi-gpio

我正在使用jasmine测试我的模块,因为我知道pi-gpio模块我require具有特定的硬件要求并且它不会运行我的开发PC(因为它不是pi),我使用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 个答案:

答案 0 :(得分:0)

只需重写你的存根写函数,调用错误函数:

var nodepibot,
    stubGpio = {
        write: function(var1, var2, callback) {
            callback("stubbed error");
        }
    };