目前,sinon
能够创建一个存根,如果参数匹配,它将返回一个给定的对象:
const methodStub = stub(service, 'method').withArgs("param1").returns("OK");
您甚至可以Assert调用了正确的参数:
expect(methodStub).to.have.been.calledWith("param1");
问:既然你明确地说你的存根方法只允许param1
,有没有一种方法可以在不显式使用calledWith方法的情况下进行Assert**?**
2条答案
按热度按时间s2j5cfk01#
我不认为说“你的存根方法只允许
"param1"
”是完全正确的。相反,您只在使用参数"param1"
调用方法的情况下对方法进行存根化,并且您已将该存根定义为返回"OK"
。这并不禁止代码使用任何其他参数调用该方法,但是,当使用"param1"
以外的任何参数调用该方法时,它将返回undefined
,因为您没有为任何其他参数提供返回值。关于使用
calledWith
的具体问题:由于您已经用
.withArgs("param1")
约束了存根,因此,正如您的问题所预期的,Assert它已经用"param1"
调用过就等同于Assert它已经被调用过。sinon-chai有一个
.called
属性,它的行为与不使用.calledWith
的代码相同-如果service.method
not 使用"param1"
调用,它将抛出AssertionError。expect(methodStub).to.have.been.called
guykilcj2#
在链中首先添加.callsFake(throwError)。
参见https://glebbahmutov.com/blog/lock-down-sinon-stub/(无从属关系!)
它提倡做你要求做的事情,并解释如何做到这一点。