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:
- 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 ladescribeen su lugar con la misma facilidad y todo funciona como se espera. - 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