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 视为代码异味。”他们建议使用double
或double_instance
,如下所述:***.com/a/51922393/2233856。以上是关于rspec中的模拟方法链的主要内容,如果未能解决你的问题,请参考以下文章
Rails 4, RSpec 3.2 - 如何模拟 ActionMailer 的 Deliver_now 方法来引发异常
使用Rspec存根和模拟在Rails Oauth中实现100%的测试覆盖率