2012-04-21 64 views
0

用下面測試的RSpec:Rspec和_return按id排序?

@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不會使我回ROM中的stub_chain值的值。特別是,返回的數組內部的項目是相同的,但它們的順序似乎按id排序而不是按名稱排序。有誰知道爲什麼會發生?

謝謝!

+0

這遠遠不是一個規範的,你只是測試你實現這是沒有意義的。要指定範圍,請在db中創建條目並查看是否獲得了您期望的條目。 – apneadiving 2012-04-21 20:54:24

+0

是的,我知道這個測試是多餘的,我不再使用它,但它只是這種行爲很奇怪,所以我想知道是否有人解釋它爲什麼發生。 – user1082160 2012-04-21 21:00:35

回答

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] 
+0

我的意思是,用上面的thz替換你當前的'stub'和'should' – apneadiving 2012-04-21 21:09:15