gpt4 book ai didi

node.js - Sinon.js 并使用事件和新功能进行测试

转载 作者:搜寻专家 更新时间:2023-10-31 23:27:35 25 4
gpt4 key购买 nike

我正在尝试模拟 node.js 应用程序,但它没有按预期工作。

我有一个名为 GpioPlugin 的 node.js 模块,方法如下:

function listenEvents(eventId, opts) {
if(!opts.pin) {
throw new Error("option 'pin' is missing");
}
var listenPort = new onOff(opts.pin, 'in', 'both', {persistentWatch: true});

listenPort.watch(function(err, value) {
process.emit(eventId+'', value);
});
}
if(typeof exports !== 'undefined') {
exports.listenEvents = listenEvents;
}

现在我想使用 sinon 为这种方法编写一个测试,但我不知道如何......测试这个的最佳方法是什么?

如果经过测试,这棵树的部分会很好:错误(没问题)生成 onOff(如何?)具有正确参数的事件

最佳答案

如果还没有,您需要将 onOff 放入模块中,以便您的测试可以注入(inject)一个 stub 。

var sinon = require("sinon");
var process = require("process");
var onOffModule = require(PATH_TO_ONOFF); //See note
var gpio = require(PATH_TO_GPIO);

var onOffStub;
var fakeListenPort;

beforeEach(function () {
//Stub the process.emit method
sinon.stub(process, "emit");

//Constructor for a mock object to be returned by calls to our stubbed onOff function
fakeListenPort = {
this.watch = function(callback) {
this.callback = callback; //Expose the callback passed into the watch function
};
};

//Create stub for our onOff;
onOffStub = sinon.stub(onOffModule, "onOff", function () {
return fakeListenPort;
});
});

//Omitted restoring the stubs after each test

describe('the GpioPlugin module', function () {
it('example test', function () {
gpio.listenEvents("evtId", OPTS);

assert(onOffStub.callCount === 1); //Make sure the stub was called
//You can check that it was called with proper arguments here

fakeListenPort.callback(null, "Value"); //Trigger the callback passed to listenPort.watch

assert(process.emit.calledWith("evtId", "Value")); //Check that process.emit was called with the right values
});
});

注意:将 onOff 替换为 stub 的确切机制可能因您的需要而异。

如果您直接需要 onOff,而不是需要包含 onOff 的模块,事情会变得有点复杂。在那种情况下,我认为您可能需要查看类似 proxyquire 的内容.

关于node.js - Sinon.js 并使用事件和新功能进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19928923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com