Rails 2アプリをRails 3にアップグレードしていますが、テストの1つから次の行を「アップグレード」する方法がわかりません
Category.should_receive(:find).with(:all,:conditions => {:parent_id => @parent_id}, :order => 'disp_order DESC').and_return(@categories_collection)
ここからどこから始めればよいか 100% 確信が持てないので、誰かがこれについていくつかの指針を提供してくれることを願っています。
これを実行すると、次のエラーが表示されます。
Failure/Error: Category.should_receive(:find).with(:all,
(<Category(id: integer, permalink: string, name: string, parent_id: integer) (class)>).find(:all, {:conditions=>{:parent_id=>1}, :order=>"display_order DESC"})
* *更新 1
ジムが説明したようにリファクタリングしました(すばらしい説明です!)が、次のようになりました:
Failure/Error: Category.should_receive(:with_parent).with(1).and_return(@sub_category)
(<Category(id: integer, permalink: string, name: string, parent_id: integer) (class)>).with_parent(1)
expected: 1 time
received: 0 times
ただし、テストに次を追加すると:
puts Category.with_parent(1).length.to_s
出力は「1」です - 正しい/期待される値です。何らかの理由で、RSpec はこれを認識せず、エラーをスローします。なぜこれが起こっているのか知っていますか?
* *更新 2
興味深いことに、次のテスト パスを使用すると、次のようになります。
Category.with_parent(@parent_id).should == [@sub_category]
これは失敗しますが:
Category.should_receive(:with_parent).with(@parent_id).and_return(@sub_category)
rspec2 のこのコンテキスト内で should_receive と .ad_return を使用すると問題がありますか?