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

问题描述 投票:0回答:2

目前,

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

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

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

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

问题:由于您明确表示您的存根方法将只允许

param1
,有没有办法在不显式使用 calledWith 方法的情况下进行断言

javascript mocha.js sinon
2个回答
0
投票

我认为说“你的存根方法只允许

"param1"
”是不太正确的。相反,您仅在使用参数
"param1"
调用方法的情况下对您的方法进行存根,并且您已定义该存根以返回
"OK"
。这不会禁止您的代码使用任何其他参数调用该方法,但是,当使用
"param1"
以外的任何其他参数调用它时,它将返回
undefined
因为您没有为任何其他参数添加返回值。

关于使用

calledWith
的具体问题:

因为你已经用

.withArgs("param1")
限制了你的存根,那么正如你的问题所预期的那样,断言它已经被
"param1"
调用等同于断言它已经被调用了。

sinon-chai 有一个

.called
属性,在不使用
.calledWith
的情况下,它的行为与您的代码相同 - 如果
service.method
not
"param1"
调用,它将抛出 AssertionError。

expect(methodStub).to.have.been.called


0
投票

首先在链中添加 .callsFake(throwError)。

https://glebbahmutov.com/blog/lock-down-sinon-stub/(无从属关系!)

提倡做你要求做的事,并解释如何做。

© www.soinside.com 2019 - 2024. All rights reserved.