2011-09-01 16 views
12

我有点撕裂。对Rails 3中的Scopes进行单元测试是否合理?测试Rails 3范围是否有意义?

一方面,我正在编写代码,我应该测试该代码。

但是,另一方面,基本上我所有的范围都是微不足道的。根据传递的参数检查一个变量几乎是迄今为止最复杂的范围。

scope :author, proc { |author| where(:author_user_id => author }

该代码是微不足道的,并且还或多或少覆盖在实际使用范围的功能。

测试或不测试示波器的最佳做法是什么?

+0

你为什么定义这个范围?使用类似标准的协会来访问作者身边的任何东西不是更合适吗? –

+0

用户模型当然可以获得他们创作的所有关联对象的列表。 'has_many:authored_articles ...'这只是我的光标着陆的第一个简单示波器。当我有一些其他加入的作用域时会使用它 – Drew

回答

2

如果您认为范围太简单而无法测试,那么您肯定可以忽略它,但是如果您考虑测试范围,我会告诉您看看this answer并专注于测试行为而不是代码本身。

+1

我想说你不应该测试范围实现,而是行为。 [这是答案](http://stackoverflow.com/questions/3025103/how-to-test-a-scope-in​​-rails-3/3146311#3146311)我会链接到。 – Uzbekjon

15

大卫赫利姆斯基(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