如何测试范围?

时间:2011-01-30 01:20:18

标签: ruby-on-rails unit-testing ruby-on-rails-3 rspec2 shoulda

试图找到但没有成功。只是想知道如何在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

2 个答案:

答案 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)

我确信这是一个更优雅的解决方案,但我总是设置一些应该而且不应该在我的范围内的对象。在调用范围之后,我检查返回的对象是否应该是,并且没有它不应该的对象。

如果有的话,我希望得到其他答案的启发。