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 ladescribe
en 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