我宁愿使用查询进行测试并检查结果,但如果你真的必须这样做,一个可能的解决方案是 Rails 3 的类似方法:
CatMembership.scoped.to_sql.should == CatMembership.order(:created_at).to_sql
在 Rails 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