如果我有一个接受两个回调的函数的存根,当存根函数被调用时,我如何连接sinon.js来调用两个回调?
例如,这里有一个我想存根的函数,它接受两个函数作为参数:
function stubThisThing(one, two) {
... one and two are functions ...
... contents stubbed by sinon.js ...
}
我可以用sinon来称呼其中一个论点:
stubbedThing.callsArg(0);
或者
stubbedThing.callsArg(1);
但我似乎不能让两者都被召唤。如果我尝试:
stubbedThing.callsArg(0).callsArg(1);
或者
stubbedThing.callsArg(0);
stubbedThing.callsArg(1);
那么sinon只会调用第二个参数。如果我以另一个顺序连接它,那么sinon将调用第一个参数。然而,我希望两者都被一个接一个地称呼。
你为什么不完全跳过罪恶?
var obj = { stubMe: function(cb1, cb2) {} };
var originalMethod = obj.stubMe;
obj.stubMe = function(cv1, cb2) {
//Whatever logic you wish
cb1();
cb2();
};
//Do your test
obj.stubMe = originalMethod; //Restore
这样,如果您愿意,您甚至可以继续使用兴农的API:
var stub = sinon.stub();
obj.stubMe = function(cb1, cb2) {
stub.apply(stub, arguments);
//Rest of whatever logic you wanted here
};
obj.stubMe();
expect(stub.calledOnce()).to.be(true); //That would pass
你觉得怎么样?
这不是一个典型的场景,因为没有多少方法会按顺序调用两个方法,我想这就是为什么它不受支持。但是,冷静一点,解决方案很简单:
var subject = {
method: function(one, two) {}
};
var stub = sinon.stub(subject, 'method', function(one, two) {
one();
two();
});
subject.method(
function() { console.log('callback 1'); },
function() { console.log('callback 2'); });
附注:这也提供了选择是否应首先调用一个或两个的选项。
我有以下要测试的对象: 这是我的测试: 我正在覆盖特定参数的匹配器。我正在存根方法,以便它为特定参数返回一个值,否则抛出一个IOException,该IOException由MyObject处理。读取文件。 奇怪的是,第二个存根()在第一个存根()中抛出IOException集。我通过在第一个存根中抛出不同的异常来验证这一点。 有人能解释一下为什么在添加其他存根时会引发异常吗?我认为创建存根不会调
问题内容: 我正在尝试使用sinon.js存根方法,但是出现以下错误: 这是我的代码: 这是上述代码的jsFiddle(http://jsfiddle.net/pebreo/wyg5f/5/),还有我提到的SO问题的jsFiddle(http://jsfiddle.net/pebreo/9mK5d/1/)。 我确保在ssfiddle甚至jQuery 1.9 的 外部资源 中都包含了sinon 。我
我试图用Mocha、Chai和Sinon为我的代码添加更多的测试,但是我很难理解为什么第二个存根函数没有被识别为被调用。 我有一个向用户发送电子邮件的功能(稍后我将测试电子邮件功能-现在我只想处理我控制的存根依赖项) 和测试文件: 我可以用Sinon存根User.findOne()方法,但是当我尝试存根emailLogger.log()方法时,我遇到了麻烦。它似乎调用了存根,而不是真正的方法,而是
因此,在重构我的基于类的聊天机器人组件以使用反应钩子的过程中,我遇到了一个使用状态钩子覆盖状态中的对象的问题。这导致只有机器人响应显示在用户界面中。当我与机器人聊天时,用户界面中显示的用户输入的闪光会被聊天机器人的响应覆盖。下面是代码: 可以这样在同一个异步函数中写入useState两次吗?如果不是,您建议我如何重构此代码,以便消息状态返回一个交替对象数组,例如:
问题内容: 我正在为node.js代码编写一些单元测试,并且使用Sinon通过以下方式存根函数调用 该是这样的 对于诸如这样的用例,模拟显然可以工作,但是我想知道如何在使用时在anotherF()内部模拟myFunction()调用? 问题答案: 您可以稍微重构一下模块。像这样。
问题内容: 我试图监视一个对象,并且想在构造函数调用它之前对构造函数调用的方法进行存根。 我的课看起来像这样: 不能调用setup方法。好吧,我如何监视这种方法(以及存根设置,使其什么也不做)? 模拟方法可以很好地工作,但是我想进行单元测试,因此我将需要其他方法。 之所以需要对设置方法进行打桩以使其无能为力的原因: 我正在对Lego机器人(lejos)进行编程,并在设置中放入了一些代码,该代码需要