试图找到但没有成功。只是想知道如何在Rails 3中测试范围。
可以使用rspec,shoulda或仅使用测试单元。
感谢。
实际上,我尝试这种方式,但它不是完整的测试,因为它仍然需要放置order()方法。
范围:
scope :recents_available, where(:available => true, :locked => false).order("created_at DESC")
describe Job, ":recents_available" do
it "should have the scope" do
Job.should respond_to(:recents_available)
end
it "should include recents jobs that are available and unlocked" do
@job = Factory(:job, :available => true, :locked => false )
Job.recents_available.should include(@job)
end
端
答案 0 :(得分:24)
David Chelimsky(Rspec的创建者)在Rspec Google Group中提供了以下示例:
describe User, ".admins" do
it "includes users with admin flag" do
admin = User.create! :admin => true
User.admin.should include(admin)
end
it "excludes users without admin flag" do
non_admin = User.create! :admin => false
User.admin.should_not include(non_admin)
end
end
class User < ActiveRecord::Base
named_scope :admins, :conditions => {:admin => true}
end
这显然与你的例子不同,但它应该让你知道如何做到这一点。上下文的相关主题在这里:http://groups.google.com/group/rspec/browse_thread/thread/6706c3f2cceef97f
答案 1 :(得分:4)
我确信这是一个更优雅的解决方案,但我总是设置一些应该而且不应该在我的范围内的对象。在调用范围之后,我检查返回的对象是否应该是,并且没有它不应该的对象。
如果有的话,我希望得到其他答案的启发。