他のスコープのチェーンに基づいているスコープをテストしようとしています。(以下の「public_stream」)。
scope :public, where("entries.privacy = 'public'")
scope :completed, where("entries.observation <> '' AND entries.application <> ''")
scope :without_user, lambda { |user| where("entries.user_id <> ?", user.id) }
scope :public_stream, lambda { |user| public.completed.without_user(user).limit(15) }
次のようなテストを使用します。
it "should use the public, without_user, completed, and limit scopes" do
@chain = mock(ActiveRecord::Relation)
Entry.should_receive(:public).and_return(@chain)
@chain.should_receive(:without_user).with(@user).and_return(@chain)
@chain.should_receive(:completed).and_return(@chain)
@chain.should_receive(:limit).with(15).and_return(Factory(:entry))
Entry.public_stream(@user)
end
ただし、引き続きこのエラーが発生します。
Failure/Error: Entry.public_stream(@user)
undefined method `includes_values' for #<Entry:0xd7b7c0>
include_valuesはActiveRecord::Relationshipオブジェクトのインスタンス変数のようですが、スタブしようとすると、同じエラーが発生します。Rails 3の新しい連鎖クエリをスタブ化した経験がある人はいないでしょうか?2.xの検索ハッシュについて多くの議論を見つけることができますが、現在のものをテストする方法については何もありません。