Jwa*_*622 4 ruby rspec ruby-on-rails
我有一段这样的代码:
Green::Trees.where(id: ids).find_each do |tree|
tree.grow!
end
Run Code Online (Sandbox Code Playgroud)
什么是存根的好方法,find_each以便在每次迭代中,它返回我在测试中的 let 块中定义的树,如下所示:
let(:tree) { create(:tree) }
let(:tree_ids) { [tree.id] }
Run Code Online (Sandbox Code Playgroud)
我能做些什么?
我应该做这样的事情吗?
allow(Green::Tree).to receive(:where).and_return(Green::Tree)
allow(Green::Tree).to receive(:find_each).and_yield(tree)
Run Code Online (Sandbox Code Playgroud)
RSpec 为您提供了两种存根链接方法调用的方法。
简洁的方法是receive_message_chain:
allow(Green::Trees).to receive_message_chain(:where, :find_each).and_yield(tree)
Run Code Online (Sandbox Code Playgroud)
但是,这不允许您指定参数,尽管这样做通常并不重要。
如果你关心争论,你可以这样做:
results = double
allow(Green::Tree).to receive(:where).with(id: ids).and_return(results)
allow(results).to receive(:find_each).and_yield(tree)
Run Code Online (Sandbox Code Playgroud)
您编写的内容可以工作,但它是不正确的,因为where不返回 class Green::Tree,而是返回 ActiveRecord 关系。Green::Tree确实实现了find_each,但它是一种与关系上的方法同名的不同方法。很混乱!
| 归档时间: |
|
| 查看次数: |
1004 次 |
| 最近记录: |