クエリを使用して結果を確認することでこれをテストしたいのですが、本当に実行する必要がある場合、考えられる解決策の1つは、Rails3の場合のようになります。
CatMembership.scoped.to_sql.should == CatMembership.order(:created_at).to_sql
そしてレール2:
CatMembership.default_scoping.should == [{:create=>{}, :find=>{:order=>"created_at"}}]
しかし、これらのソリューションは実装に関する多くの知識を示しているため、理想的とは言えません(そして、実装はRailsのバージョンによって異なることがわかります)。
サンプルデータを作成し、通常のすべてのクエリを実行し、結果が正しく順序付けられていることを確認する方が簡単で、実際の単体テストに近く、Railsバージョンをアップグレードしても機能します。
この場合、次のようになります。
before do
@memberships = []
@memberships << CatMembership.create!
@memberships << CatMembership.create!
@memberships << CatMembership.create!
[ 1.hour.ago, 5.minutes.ago, 1.minute.ago ].each_with_index do |time, index|
membership = @memberships[index]
membership.created_at = time
membership.save
end
end
it 'should be correctly ordered' do
@sorted_memberships = CatMembership.all
@memberships.first.should == @sorted_memberships.last
@memberships.second.should == @sorted_memberships.second
@memberships.third.should == @sorted_memberships.first
end
これははるかに冗長ですが、レールを進んでも機能します。
そして今、私は誰が質問をしたかに気づきました:D