2011-01-05 14 views
7

He usado shoulda por un tiempo, y he leído y jugado con rspec. No he hecho una comparación en profundidad y contraste. Pero me parece que hay una superposición entre los dos, pero que no son reemplazos 1-1.rspec y shoulda - ¿complementario o alternativo?

estoy considerando escribir algunas pruebas unitarias en mi sistema de raíles con rspec, sin tener que reemplazar todas las pruebas existentes que se escriben con la debería. Solo como una forma de sentir.

¿Es esta una buena idea? ¿Puedo pasar gradualmente de uno a otro o estoy pidiendo problemas?

¿Alguna clara ventaja de uno sobre el otro que debería considerar?

Gracias!

Respuesta

12

Tengo que argumentar en contra de la respuesta de Chris que son alternativas. Utilizo Shoulda y Rspec juntos en mi aplicación Rails, y se complementan entre sí.

Este combo me permite escribir pruebas concisas de una línea para elementos recurrentes, como asociaciones y validaciones, así como también tener el conjunto completo de rspec para especificaciones más complejas. Obtienes lo mejor de ambos mundos sin ningún conflicto.

Mira la Shoulda README que muestra cómo instalar al lado de Rspec. Incluso dice que proporciona "Test :: Unit- y RSEC-one-liners compatibles que prueban la funcionalidad común de Rails. De lo contrario, estas pruebas serían mucho más largas, más complejas y propensas a errores".

Editar (ejemplos):

En la parte superior de las especificaciones de mi, siempre me declaro mi relación de clase y validación de pruebas que son concisos y fáciles de leer.

describe Component do 

    context 'relationships' do 
    it { should belong_to(:technology)} 
    it { should have_many(:system_components) } 
    it { should have_and_belong_to_many(:variables) } 
    it { should have_many(:images).dependent(:destroy) } 
    it { should have_many(:documents).dependent(:destroy) } 
    end 

    context 'validations' do 
    it { should validate_presence_of(:make) } 
    it { should validate_presence_of(:model) } 
    it { should ensure_length_of(:name).is_at_most(100) } 
    it { should validate_presence_of(:technology_id) } 
    end 
end 

A continuación, el resto de mi especificación tendrá pruebas más complejas en las que estoy usando burla y talones de los cuales provienen de Rspec.

+0

Estas son algunas de las perspectivas más en él: http://stackoverflow.com/questions/3604564/rspec-vs-shoulda –

+0

Me amo algunos ejemplos de cosas que haces con el combo que no se podía hacer con una sola o el otro Si hay formas en que puedo limpiar mis exámenes, estoy totalmente de acuerdo. Estaba usando shoulda + matchy juntos, luego descubrí que rspec básicamente hizo eso y se fue de allí. ¿Es solo cosas como el controlador de los matchers? –

+0

Actualicé mi respuesta con algunas de las pruebas que tengo. Una regla tiendo a seguir es que Shoulda se utiliza para Rieles construida en macros de clase como las validaciones y las relaciones, y Rspec es para las pruebas más complejas donde se requiere objetos simulados y stubbing método. –

0

rspec y shoulda son alternativas entre sí. Empecé con HERA, también, y pasar a rspec es tan simple como s/context/describe/, s/should/it/, y vas a las carreras. rspec tiene un montón de trucos, varias integraciones y combinaciones más complejas, así que ahora mismo lo estoy usando más.

Una de mis frustraciones iniciales fue que era casi imposible encontrar un tutorial que no asumió rieles y del pepino. No lo piense demasiado: hay muchas cosas que puede hacer con él, pero no tiene que tener una solución monstruosa antes de poder usarlo.

Cuestiones relacionadas