我有一个声明,就像Model.some_scope.pluck(:a_field)
我想测试的方法一样。
我用 rspec-mocks 3.4.0 存根这个链式方法调用语句的返回值的推荐方法是什么?我看到了,stub_chain
并且receive_message_chain
在 RSpec 网站上都被列为旧语法。
此致。
我有一个声明,就像Model.some_scope.pluck(:a_field)
我想测试的方法一样。
我用 rspec-mocks 3.4.0 存根这个链式方法调用语句的返回值的推荐方法是什么?我看到了,stub_chain
并且receive_message_chain
在 RSpec 网站上都被列为旧语法。
此致。
测试该代码的最简洁方法是提取一个方法,例如
class Model < ActiveRecord::Base
def self.some_scope_fields
some_scope.pluck(:a_field)
end
end
该方法可以在没有链的情况下被存根。
但是,有时这样做既不方便也不习惯。例如,调用create
ActiveRecord 模型的关联方法是惯用的,而不是违反 Demeter 法则。在那些情况下,
如果您不关心方法参数,请使用receive_message_chain
. stub_chain
已弃用;receive_message_chain
不是。文档所说的是“未来版本可能会删除对 stub_chain 奇偶校验的支持” 。receive_message_chain
从该文档链接到的问题清楚地表明“存根链奇偶校验”意味着使用with
with receive_message_chain
。所以请使用receive_message_chain
; 只是不要with
与它一起使用。
如果您确实关心方法参数,请使用双打。例如,对于您提供的代码,
scope = double
allow(scope).to receive(:pluck).with(:a_field) { # return whatever }
allow(Model).to receive(:some_scope).with(no_args) { scope }