我正在编写一个 Nodejs 模块来抽象连接到 Raspberry Pi 的 gpio 接头的驱动电机的细节。
我用来与 pi 的 gpio 通信的 Node 模块是 pi-gpio
我正在使用 jasmine
测试我的模块,并且因为我知道我需要
的 pi-gpio
模块具有特定的硬件要求,并且它不会在我的开发 PC 上运行(因为它不是 pi),所以我使用 proxyquire stub 依赖关系。
考虑以下(简化的)模块:
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
时,会使用适当的参数在 pi-gpio
库上调用 write
方法。
我想做的是测试un-happy path
- IE。当 err
有值时测试匿名回调函数,在这种情况下我断言会抛出异常。
有人知道我该怎么做吗?
最佳答案
只需重写 stub 写入函数,即可调用错误函数:
var nodepibot,
stubGpio = {
write: function(var1, var2, callback) {
callback("stubbed error");
}
};
关于node.js - Node - 如何测试 stub 依赖项的匿名回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35509601/