Sinon模拟有一个带有exactArgs的方法,该方法声明传递给有问题的方法的参数数量。有没有办法使用存根实现这种行为?
现在他们似乎像这样工作:
const methodStub = stub();
methodStub.withArgs().returns(1);
console.log(methodStub()); // prints 1
console.log(methodStub({})); // also prints 1
我想要一个 exact 参数匹配。我已经研究过向sinon添加自定义行为,但没有成功。我真的不知道下一步该怎么做。
我知道在进行调用之后我可以检查参数,但是我觉得以这种方式编写的测试的整洁性没有用。
此外,这篇关于SO的相当受欢迎的帖子让我非常感到困惑:Can sinon stub withArgs match some but not all arguments。引用:
如果我使用method.get.withArgs(25).calls ...则也不匹配,因为withArgs()匹配所有参数
我似乎正在观察与Sinon v6完全相反的情况,这正是OP所寻找的行为...
答案 0 :(得分:0)
此链接问题的陈述不正确:
withArgs()
与所有参数匹配
withArgs
不与所有参数匹配。我添加了answer并提供了详细信息。
withExactArgs
代表stub
has been discussed but never implemented。
所以,是的,当前,在调用后检查参数,将callsFake
与自定义函数一起使用,添加自定义行为,或者使用mock
而不是stub
sinon
中的选项,用于断言使用精确参数调用了一个方法。
举个例子,问题的存根看起来像它应该只返回1
,如果没有参数可以使用callsFake
来调用它:
test('stub exact args', () => {
const stub = sinon.stub();
stub.callsFake((...args) => {
if (args.length === 0) {
return 1;
}
return 'default response';
});
expect(stub()).toBe(1); // SUCCESS
expect(stub({})).toBe('default response'); // SUCCESS
});