让我们考虑以下功能:
function MyClass(...);
MyClass.prototype.funcToTest = function() {
var args = arguments;
...
}
我希望能够测试调用此函数的参数。 在我的测试中,我做了以下几点:
var obj = new MyClass();
sinon.spy(obj, 'funcToTest');
var args = [5, 3, 8];
MyClass.prototype.funcToTest.apply(obj, args);
sinon.assert.calledWithExactly(obj.funcToTest, args); // Here's the problem
问题是这个断言失败了,我不确定why.ith?
答案 0 :(得分:0)
*请参阅我对Vsevolod Goloviznin回答的第二条评论。
我找到了一个解决方案,不知道它是否是最好的解决方案,但是我创建了一个新的数组以使用apply
函数传递给断言,如下所示:
var arr = [].slice.call(args, 0);
arr.unshift(obj.funcToTest);
sinon.assert.calledWithExactly.apply(null, arr);
答案 1 :(得分:0)
有两个问题:
obj.funcToTest
进行间谍活动,但您正在调用 MyClass.prototype.funcToTest
。为了这个测试的目的,这是两个不同的东西; 这里有用的东西:
var obj = new MyClass();
sinon.spy(obj, 'funcToTest');
var args = [5, 3, 8];
obj.funcToTest.apply(obj, args);
sinon.assert.calledWithExactly.apply(sinon.assert, [ obj.funcToTest ].concat(args))
或者使用硬编码参数列表:
sinon.assert.calledWithExactly(obj.funcToTest, 5, 3, 8);