【问题标题】:How to test scopes?如何测试范围?
【发布时间】:2011-01-30 01:20:18
【问题描述】:

试图找到但没有成功。只是想知道如何在 Rails 3 中测试范围。

可以使用 rspec、should 或只是一个测试单元。

谢谢。

其实我也尝试过这种方式,但还不是完整的测试,还需要放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

结束

【问题讨论】:

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


    【解决方案1】:

    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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 设置两个边缘案例并测试您的方法(这就是真正的范围)是一个优雅的测试解决方案,所以不要担心使用上述答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多