Rails和RSpec:模拟关联集合返回

时间:2016-10-04 22:05:48

标签: ruby-on-rails rspec

我有一些代码通过关联使用find_or_initialize_by:

author.posts.find_or_intialize_by(params)

出于某些测试的目的,我想控制返回的内容。但是,我似乎无法弄清楚要嘲笑的内容。

author.posts.class #=> Post::ActiveRecord_Associations_CollectionProxy

allow(Post::ActiveRecord_Associations_CollectionProxy).to receive(:find_or_initialize_by).and_return(Post.new)

这引发了错误:

Post::ActiveRecord_Associations_CollectionProxy does not implement: find_or_initialize_by

我意识到我可以将查询更改为:

Post.find_or_initialize_by({author: author}.merge(params))

为了清楚起见,我想通过协会这样做。

如何模拟此集合以返回我的记录?

1 个答案:

答案 0 :(得分:1)

你试过了吗?

let(:author) { Author.new } # or whatever you'd like author to be)

it "is the name of your actual test here" do
  allow(author.posts).to receive(:find_or_initialize_by).and_return(Post.new)
end