2011-01-30 12 views
17

intenté encontrarlo pero sin éxito. Me preguntaba cómo podría probar ámbitos en Rails 3.Cómo probar ámbitos?

Podría estar utilizando rspec, shoulda o simplemente una unidad de prueba.

Gracias.

En realidad, estoy tratando de esta manera, pero no es una prueba completa, ya que todavía es necesario poner el método de la orden().

El Alcance:

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 

final

Respuesta

25

David Chelimsky (creador de Rspec) ofreció el siguiente ejemplo en el 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 

Obviamente no es el mismo ejemplo que el suyo, pero debe darle una idea de cómo hacerlo. El hilo relevante para el contexto está aquí: http://groups.google.com/group/rspec/browse_thread/thread/6706c3f2cceef97f

4

Estoy seguro de que hay una solución más elegante, pero siempre he acaba de configurar algunos objetos que deben y no deben estar en mi alcance. Después de llamar al alcance, compruebo que el devuelto tiene el objeto que debería, y no tiene el objeto que no debería.

En todo caso, espero ser iluminado por otras respuestas.

+0

configurando dos casos extremos y probando su método (que es realmente el alcance) es una solución de prueba elegante, así que no se preocupe por usar la respuesta anterior – Houen