2016-10-04 26 views
0

私は協会を通じてfind_or_initialize_byを使用していくつかのコードがあります:いくつかのテストの目的のためにRailsとRSpecの:モックassocation収集リターン

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 

:claritiyのために

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

、私がやってみたいですこれは協会を通じて。

私のレコードを返すためにこのコレクションをモックできますか?

+0

待機 - 例えば私のコードを消毒しながら、なぜあなたは*記事の収集に*の作者*を返すようにしようとしている* ... –

+1

を@TarynEast申し訳ありませんが、タイプミス。私はそれを更新しました。 – steel

+0

kewl - それは私が完全に問題を誤解していたと思うと思った:D –

答えて

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 
+1

:facepalm:とてもシンプルで華麗です。それはより正確です。ありがとう、@ TarynEast。 – steel

+0

hehe - 最初にそれについて学んだとき、私は同じ反応を示しました:D –

関連する問題