目前,
sinon
能够创建一个存根,如果参数匹配,它将返回给定的对象:
const methodStub = stub(service, 'method').withArgs("param1").returns("OK");
您甚至可以断言调用了正确的参数:
expect(methodStub).to.have.been.calledWith("param1");
问题:由于您明确表示您的存根方法将只允许
param1
,有没有办法在不显式使用 calledWith 方法的情况下进行断言?
我认为说“你的存根方法只允许
"param1"
”是不太正确的。相反,您仅在使用参数 "param1"
调用方法的情况下对您的方法进行存根,并且您已定义该存根以返回 "OK"
。这不会禁止您的代码使用任何其他参数调用该方法,但是,当使用 "param1"
以外的任何其他参数调用它时,它将返回 undefined
因为您没有为任何其他参数添加返回值。
关于使用
calledWith
的具体问题:
因为你已经用
.withArgs("param1")
限制了你的存根,那么正如你的问题所预期的那样,断言它已经被 "param1"
调用等同于断言它已经被调用了。
sinon-chai 有一个
.called
属性,在不使用 .calledWith
的情况下,它的行为与您的代码相同 - 如果 service.method
是 not 用 "param1"
调用,它将抛出 AssertionError。
expect(methodStub).to.have.been.called
首先在链中添加 .callsFake(throwError)。
见https://glebbahmutov.com/blog/lock-down-sinon-stub/(无从属关系!)
提倡做你要求做的事,并解释如何做。