test spec rails para mini juego ruby-on-rails ruby minitest

ruby on rails - spec - ¿Cómo organizar pruebas minitest/unit?



rspec (3)

Conozco a varias personas que vienen de RSpec a Minitest luchando con la misma pregunta. Les encanta la capacidad de anidar utilizando bloques de descripción / contexto y desean continuar en minitest. Hay varias soluciones:

  1. Use la especificación DSL de minitest: Si bien hay pequeñas diferencias, la especificación DSL le brinda la mayoría (¿todas?) De las partes buenas de la DSL rspec. La gran diferencia es la falta de bloques de context . Pero puede usar la describe en su lugar con la misma facilidad y todo funciona como se espera.
  2. Utilizar directorios y archivos: prefiero esta opción. No me gusta desplazarme por un archivo de prueba de 300 líneas, independientemente de si utiliza el DSL de especificaciones o el estilo xUnit clásico. No me parece útil anidar las pruebas no relacionadas. Las mismas reglas de comprensión para el código se aplican a las pruebas. Así que rompe para arriba Crea un directorio y coloca varios archivos dentro de él.

Aquí hay un ejemplo de cómo están organizados mis archivos de prueba:

test/ models/ user/ authentication_test.rb email_test.rb reservation_test.rb user_test.rb username_test.rb

Utilizo esta estructura, ya sea que esté usando la especificación DSL o el estilo xUnit. Al usar la especificación DSL, especifico lo que estoy probando en mi bloque de descripción, así:

require "minitest_helper" describe User, :authentications do before do # ...

Después de usar RSpec para varios proyectos, estoy probando minitest / unit. Me está gustando hasta ahora, pero extraño usar bloques de descripción / contexto para agrupar mis pruebas / especificaciones de una manera lógica.

Sé que minitest / spec proporciona esta funcionalidad, pero me gusta que minitest / unit se sienta un poco más cerca de los barebones Ruby.

¿Hay alguna gema que proporcione soporte de contexto / descripción para minitest / unidad? O, ¿debería simplemente vivir con mis archivos de prueba largos y desorganizados en minitest / unidad?


Prefiero esta manera (solo un poco) pero creo que es más fácil de seguir:

class ConventionalNameTest < ActiveSupport::TestCase class ContextTest < ConventionalNameTest # so much stuff... end class AnotherContextTest < ConventionalNameTest # and some more... end


También puede lanzar varias clases en un archivo de prueba:

module PizzaTest class Isolation < ActiveSupport::TestCase test "is awesome by default" do assert Pizza.new.awesome? end end class Integration < ActiveSupport::TestCase fixtures :all test "is awesome too" do pizzas(''one-with-everything'').awesome? end end end

e incluso clases de prueba de nido:

class PizzaTest < ActiveSupport::TestCase test "is awesome by default" do assert Pizza.new.awesome? end class Integration < ActiveSupport::TestCase fixtures :all test "is awesome too" do assert pizzas(''one-with-everything'').awesome? end end end