モデルの rspec モックを使用してコントローラーでテストを作成しようとしていますが、次の場合にのみ機能するようです
Type.any_instance.should_recieve(...)
それ以外の
instancename.should_receive(...)
私のコードは次のようになります。(通常は FactoryGirl を使用しますが、問題がないことを確認するためにこの例には参加していません)
it "calls blah on foo" do
foo = Foo.new
foo.save
foo.should_receive(:blah) #this fails because it's called 0 times
#Foo.any_instance.should_receive(:blah) #this would succeed
post :create, {:foo => foo}
end
そして私のコントローラーで
def create
foo = Foo.find_by_id(params[:foo])
foo.blah
#other stuff thats not related
end
Foo.find_by_id をモックして foo を返すことができることはわかっていますが、それはとにかく返す必要があるため、そうする必要はないと感じています。つまり、find_by_id の使用をやめるとテストが中断することになりますが、これは実際にはそうではありません。重要な詳細。
私が間違っていることは何か分かりますか?どこでも any_instance を言う必要がなく、find_by_id をモックする必要がなければ、私のテストはより良いものになると思います。