Estoy aprendiendo a escribir casos de prueba usando Rspec. Tengo un andamio de comentarios simple donde una publicación puede tener muchos comentarios. Estoy probando esto usando Rspec. ¿Cómo debo verificar el Post :has_many :comments
? ¿Debería insertar el método Post.comments
y luego verificar esto devolviendo un objeto simulado de una matriz de objetos de comentarios? ¿Es realmente necesario realizar pruebas para asociaciones de AR?Verificación de asociaciones ActiveRecord en RSpec
Respuesta
Como las asociaciones de ActiveRecord deben ser bien probadas por el conjunto de pruebas de Rails (y lo son), la mayoría de las personas no sienten la necesidad de asegurarse de que funcionen; se supone que lo harán.
Si quiere asegurarse de que su modelo es usando esas asociaciones, eso es algo diferente, y no está equivocado por querer probar eso. Me gusta hacer esto usando la gema shoulda. Te permite hacer cosas interesantes como esta:
describe Post do
it { should have_many(:comments).dependent(:destroy) }
end
La mayoría de las personas no prueba las asociaciones, ya que Rails ya cuenta con pruebas unitarias para asegurarse de que esos métodos funcionen correctamente. Si está haciendo algo complejo, como involucrar un proceso o algo así, es posible que desee probarlo explícitamente. Por lo general, puede hacer esto simplemente haciendo
a = Post.new
a.comments << Comment.new
assert a.save
assert a.comments.size == 1
o algo así.
Te tengo parcialmente. Soy nuevo en las pruebas.Digamos que escribo una prueba unitaria para verificar que todos los comentarios se eliminen cuando se elimina la publicación relacionada. Entonces esto es suficiente? Además, incluso necesito escribir una prueba unitaria para verificar un método de destrucción generado por andamios. –
asociaciones de prueba es una buena práctica en general, especialmente en un entorno donde TDD es altamente regarded- otros desarrolladores suelen mirar a sus especificaciones antes de mirar el código correspondiente. Las asociaciones de prueba se aseguran de que su archivo de especificación refleje con mayor precisión su código.
Dos maneras en que puede probar asociaciones:
Con factorygirl:
expect { FactoryGirl.create(:post).comments }.to_not raise_error
Esta es una prueba relativamente superficial que lo hará, con una fábrica como:
factory :post do title { "Top 10 Reasons why Antelope are Nosy Creatures" } end
retorno tiene un NoMethodError si su modelo carece de una asociación
has_many
con comentarios.Puede utilizar el método ActiveRecord #reflect_on_association para examinar su asociación con mayor profundidad. Por ejemplo, con una asociación más complejo:
class Post has_many :comments, through: :user_comments, source: :commentary end
Puede echar un vistazo más profundo en su asociación:
reflection = Post.reflect_on_association(:comment) reflection.macro.should eq :has_many reflection.options[:through].should eq :user_comments reflection.options[:source].should eq :commentary
y probar en cualquiera de las opciones o condiciones son relevantes.
Si no utilizas una joya externo como shoulda a prueba sus asociaciones (ver Robert Speicher 's Answer para más detalles sobre esto), otra opción es utilizar reflect_on_association
para obtener el objeto AssociationReflection
de la asociación correspondiente , y luego afirmar en eso:
describe Post do
it "should destroy its comments when it is destroyed" do
association = Post.reflect_on_association(:comments)
expect(association).to_not be_nil
expect(association.options[:dependent]).to eq :destroy
end
end
- 1. ActiveRecord tiene dos asociaciones
- 2. ActiveRecord: ¿Puedo copiar asociaciones?
- 3. ActiveRecord to_json: condicionalmente incluye asociaciones
- 4. Carga ansiosa de asociaciones polimórficas en ActiveRecord
- 5. Peticiones ActiveRecord multiproceso en rspec
- 6. burla de Rspec: ActiveRecord :: AssociationTypeMismatch
- 7. ActiveRecord, has_many: a través, y polimórficos Asociaciones
- 8. ¿Cómo lograr asociaciones con ActiveRecord versionadas?
- 9. ActiveRecord: ¿Cómo puedo clonar las asociaciones anidadas?
- 10. Llaves foráneas de columna múltiple/asociaciones en ActiveRecord/Rails
- 11. Comparación de objetos ActiveRecord con Rspec
- 12. ActiveRecord, has_many: a través de, Asociaciones polimórficos con STI
- 13. Implementación de asociaciones similares a ActiveRecord para un contenedor API
- 14. La forma perfecta de validar y probar las asociaciones de Rails 3 (utilizando RSpec/Notable)?
- 15. Comportamiento de la relación Mocking ActiveRecord en las pruebas RSpec
- 16. ¿Cómo debo escribir el ActiveRecord cuando hay múltiples asociaciones?
- 17. Accediendo a asociaciones en Rails
- 18. Rspec con raíles 3.1 da ADVERTENCIA DE DEPRESIÓN ActiveRecord :: Associations :: AssociationCollection está en desuso?
- 19. Cómo RSpec un módulo ActiveRecord compartido sin tabla de base de datos asociada?
- 20. ¿Encuentra las asociaciones para una clase ActiveRecord en tiempo de ejecución?
- 21. Elasticsearch, Tire & Asociaciones
- 22. ¿hay alguna forma de cargar asociaciones de asociaciones polimórficas ansiosas?
- 23. Cómo crear asociaciones has_and_belongs_to_many en Factory Girl
- 24. rails model has_many: a través de asociaciones
- 25. Asociaciones de ActiveRecord: ¿Algún problema si has_many SIN el correspondiente pertenece a_?
- 26. formas Creación de asociaciones polimórficas en los carriles
- 27. Usando Rails Gem Active Admin con Asociaciones
- 28. factorygirl en carriles - Asociaciones w/Restricciones de unicidad
- 29. utilizando rutas polimórficos con asociaciones anidados
- 30. Asociaciones de Solr
Gracias! tiene una vista bastante clara ahora. –
Woops, comprueben eso. Quise decir la gema Shoulda, no factory_girl. –