2011-09-01 9 views
12

Estoy un poco desgarrado. ¿Tienen sentido las pruebas unitarias para Scopes in Rails 3?¿Los carriles de prueba 3 ámbitos tienen sentido?

Por un lado, estoy escribiendo código y debería probar ese código.

Sin embargo, por otro lado, básicamente todos mis ámbitos son realmente triviales. Controlar una variable contra un parámetro pasado es prácticamente el alcance más complejo que tengo hasta ahora.

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

Ese código es trivial y también más o menos cubierto de las funciones que realmente utilizan los ámbitos.

¿Cuáles son las mejores prácticas para probar o no probar ámbitos?

+0

¿Por qué está definiendo este alcance? ¿No sería más apropiado acceder a la colección de lo que sea desde el lado del autor usando algo estándar como asociaciones? –

+0

El modelo de usuario sin duda puede obtener la lista de todos los objetos asociados que han creado. 'has_many: authored_articles ...' Este fue solo el primero de los simples alcances en los que aterrizó mi cursor. Se usa cuando tengo otros ámbitos unidos. – Drew

Respuesta

2

Si cree que el alcance es demasiado simple para probarlo, seguramente puede ignorarlo, pero si está pensando en probar ámbitos, le diría que mire this answer y se centre en el comportamiento de las pruebas y no codifique.

+1

Diría que no debes probar la implementación del alcance, sino el comportamiento. [Aquí está la respuesta] (http://stackoverflow.com/questions/3025103/how-to-test-a-scope-in-rails-3/3146311#3146311) Me gustaría enlazar a. – Uzbekjon

15

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

Cuestiones relacionadas