我有一些代码通过关联使用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))
为了清楚起见,我想通过协会这样做。
如何模拟此集合以返回我的记录?
答案 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