javascript 如果使用Sinon使用错误的参数调用存根函数,则抛出错误

yjghlzjz  于 2023-05-05  发布在  Java
关注(0)|答案(2)|浏览(146)

目前,sinon能够创建一个存根,如果参数匹配,它将返回一个给定的对象:

const methodStub = stub(service, 'method').withArgs("param1").returns("OK");

您甚至可以Assert调用了正确的参数:

expect(methodStub).to.have.been.calledWith("param1");

问:既然你明确地说你的存根方法只允许param1,有没有一种方法可以在不显式使用calledWith方法的情况下进行Assert**?**

s2j5cfk0

s2j5cfk01#

我不认为说“你的存根方法只允许"param1"”是完全正确的。相反,您只在使用参数"param1"调用方法的情况下对方法进行存根化,并且您已将该存根定义为返回"OK"。这并不禁止代码使用任何其他参数调用该方法,但是,当使用"param1"以外的任何参数调用该方法时,它将返回undefined,因为您没有为任何其他参数提供返回值。
关于使用calledWith的具体问题:
由于您已经用.withArgs("param1")约束了存根,因此,正如您的问题所预期的,Assert它已经用"param1"调用过就等同于Assert它已经被调用过。
sinon-chai有一个.called属性,它的行为与不使用.calledWith的代码相同-如果service.methodnot 使用"param1"调用,它将抛出AssertionError。
expect(methodStub).to.have.been.called

guykilcj

guykilcj2#

在链中首先添加.callsFake(throwError)。
参见https://glebbahmutov.com/blog/lock-down-sinon-stub/(无从属关系!)
它提倡做你要求做的事情,并解释如何做到这一点。

相关问题