如何在 SinonJS 中对模拟方法的返回值进行存根

Posted

技术标签:

【中文标题】如何在 SinonJS 中对模拟方法的返回值进行存根【英文标题】:How to stub the return value on a mocked method in SinonJS 【发布时间】:2015-04-30 09:35:53 【问题描述】:

我想做如下的事情:

sinon.mock(obj)
.expects('func')
.atLeast(1)
.withArgs(args)
.returns(somePredefinedReturnValue);

我希望一切都达到并包括 withArgs,但是我需要存根方法的返回值,以便在它返回时不会破坏被测方法中的其余执行流程。

我这样做的原因是因为我发现我的一些 REST 端点测试会静默通过,而当它们真的失败时,如果带有内部断言的回调的存根方法没有被调用.我正在尝试验证这些回调实际上是否被调用,以便我的测试不会给出误报。

【问题讨论】:

Stub return value for all inputs in Rhino Mocks 的可能重复项 @PaulSweatte 我使用的是 Sinon,而不是 Rhino。 Rhino 解决方案可能不适用于诗乃。 【参考方案1】:

在官方文档中 http://sinonjs.org/docs/#stubs

var stub = sinon.stub(object, "method", func);

您可以传递一个返回所需值的函数参数。

编辑:

这已从 v3.0.0 中删除。相反,您应该使用

stub(obj, 'meth').callsFake(fn)

【讨论】:

这个答案有点过时了,因为v3.0.0 你应该使用 callsFake 来这样做,比如:var stub = sinon.stub(object, "method").callsFake(func); Reference here。 编辑对我来说看起来不错!具体问题是询问模拟,而不是存根,但 callsFake 也适用于模拟。

以上是关于如何在 SinonJS 中对模拟方法的返回值进行存根的主要内容,如果未能解决你的问题,请参考以下文章

在 Grails 中对服务进行单元测试时如何模拟请求

你如何在 GoLang 的模拟中模拟错误返回值?

在python中对类的多个方法进行模拟的简洁方法是什么?

如何在 Service 构造函数中对 Controller 进行单元测试和模拟 @InjectModel

PHPUnit 如何获得模拟方法的真实返回值?

如何在 Jest 的模拟依赖项中更改方法的返回值?