rspec中的模拟方法链

Posted

技术标签:

【中文标题】rspec中的模拟方法链【英文标题】:Mocking chain of methods in rspec 【发布时间】:2017-03-27 02:19:14 【问题描述】:

有一系列方法可以获取user 对象。我试图模拟以下内容以在我的Factory Girl 中返回user

@current_user = AuthorizeApiRequest.call(request.headers).result

我可以模拟对象直到 call 方法,但我被困在模拟 result 方法

allow(AuthorizeApiRequest).to receive(:call).and_return(:user)

【问题讨论】:

我发现了这个问题***.com/questions/8003445/…,它可能对你有用 【参考方案1】:

我发现我需要使用receive_message_chain

所以这对我有用。

allow(AuthorizeApiRequest).to receive_message_chain(:call, :result).and_return(user)

【讨论】:

这在某些情况下有效,但请注意文档页面中的“警告”:“链可以任意长,这使得以暴力方式违反得墨忒耳定律非常容易,所以你应该将任何使用 receive_message_chain 视为代码异味。”他们建议使用doubledouble_instance,如下所述:***.com/a/51922393/2233856。

以上是关于rspec中的模拟方法链的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4, RSpec 3.2 - 如何模拟 ActionMailer 的 Deliver_now 方法来引发异常

模拟在 Rspec Capybara 中按下 Tab 键?

使用Rspec存根和模拟在Rails Oauth中实现100%的测试覆盖率

模拟 Rails.env.development?使用 rspec

Rspec 模拟和存根与期望混淆

没有导轨的 rspec 迷你模拟服务器