0

次のrspecテストを使用します。

@search_text = "California"
@search_condition = "location"
Video.stub_chain(:where,:order).and_return([@vid1,@vid2,@vid3])
Video.should_receive(:where).with("lower(#{@search_condition}) LIKE ?", "%#{@search_text}%".downcase)

return_val = Video.search(@search_text, @search_condition)
return_val.should == [@vid1,@vid2,@vid3]

これは、次のスコープをテストします。

  scope :search, (lambda do |search_text, search_condition|
                where("lower(#{search_condition}) LIKE ?", "%#{search_text}%".downcase).order("name")
              end)

return_valueに対して取得した値は、stub_chainから返した値にはなりません。特に、返される配列内の項目は同じですが、それらの順序は名前ではなくIDでソートされているように見えます。なぜこれが起こるのか誰かが知っていますか?

ありがとう!

4

1 に答える 1

0

これを試して:

unordered_videos = double "Video"
Video.should_receive(:where).with("lower(#{@search_condition}) LIKE ?", "%#{@search_text}%".downcase).and_return unordered_videos
unordered_videos.should_receive(:order).and_return [@vid1,@vid2,@vid3]
于 2012-04-21T21:03:15.957 に答える