tutorial test spec run rails ruby-on-rails-3 minitest

ruby-on-rails-3 - test - rspec rails 5 tutorial



Usando Minitest en rieles (5)

Recientemente, he leído bastantes artículos sobre Minitest. Realmente me gusta la idea de un marco de prueba superligero. Decidí reemplazar rspec con él en un proyecto reciente y no tuve suerte para que todo funcione. Mis problemas son

a) obtener rutas con nombre en mis pruebas de aceptación / integración (rspec y test :: unit parecen incluirlas automáticamente pero no con minitest),
b) y la falta general de adopción en los raíles me hace sentir incómodo (todos parecen estar usando rspec aunque se usa más con gemas / bibliotecas).

¿Vale la pena usar minitest cuando rspec tiene el dominio principal con las aplicaciones de rieles de prueba?



Recientemente cambié una aplicación de Rspec a Minitest y valió la pena. Las pruebas se ejecutan mucho más rápido, la sintaxis fomenta un código más inteligente y ágil, y de alguna manera, ahora tengo más confianza en el conjunto (menos magia en el trabajo).

La mejora se extiende a las pruebas de integración / aceptación, considero que Minitest con Capybara es mucho más legible y directo que Cucumber (y mucho menos frágil).

A continuación hay un archivo auxiliar que debería ser todo lo que necesita para obtener pruebas de unidades, funcionales y de integración que se ejecutan con Minitest utilizando la sintaxis de las especificaciones . Esto se basó en una esencia de @tenderlove y mucha lectura / experimentación. Notas y advertencias a continuación.

ENV["RAILS_ENV"] = "test" require File.expand_path(''../../config/environment'', __FILE__) require ''rubygems'' gem ''minitest'' require ''minitest/autorun'' require ''action_controller/test_case'' require ''miniskirt'' require ''capybara/rails'' require ''mocha'' require ''turn'' # Support files Dir["#{File.expand_path(File.dirname(__FILE__))}/support/*.rb"].each do |file| require file end class MiniTest::Spec include ActiveSupport::Testing::SetupAndTeardown alias :method_name :__name__ if defined? :__name__ end class ControllerSpec < MiniTest::Spec include Rails.application.routes.url_helpers include ActionController::TestCase::Behavior before do @routes = Rails.application.routes end end # Test subjects ending with ''Controller'' are treated as functional tests # e.g. describe TestController do ... MiniTest::Spec.register_spec_type( /Controller$/, ControllerSpec ) class AcceptanceSpec < MiniTest::Spec include Rails.application.routes.url_helpers include Capybara::DSL before do @routes = Rails.application.routes end end # Test subjects ending with ''Integration'' are treated as acceptance/integration tests # e.g. describe ''Test system Integration'' do ... MiniTest::Spec.register_spec_type( /Integration$/, AcceptanceSpec ) Turn.config do |c| # use one of output formats: # :outline - turn''s original case/test outline mode [default] # :progress - indicates progress with progress bar # :dotted - test/unit''s traditional dot-progress mode # :pretty - new pretty reporter # :marshal - dump output as YAML (normal run mode only) # :cue - interactive testing c.format = :cue # turn on invoke/execute tracing, enable full backtrace c.trace = true # use humanized test names (works only with :outline format) c.natural = true end

Notas

  • Adaptado para su uso en Rails 3.1 o 3.2. No he probado debajo de eso.
  • gem ''minitest'' es necesaria para obtener una funcionalidad Minitest más avanzada ( let bloques, etc.)
  • Esto usa mocha (mocks / stubs más completos), minifalda (factory_girl lite), y el nuevo turnner. Ninguna de estas son dependencias.
  • A partir de Rails 3.2, los bloques de describe anidados en las pruebas del controlador generan un error


Soy el autor de minitest-rails . Las cosas han cambiado mucho desde el momento en que originalmente preguntaste esto hasta ahora. Mi respuesta asume que estás usando minitest-rails.

Rutas nombradas

Si está utilizando minitest-rails esto solo funciona (ahora). Puede usar los generadores para crear estas pruebas, o puede escribirlas usted mismo. Todas las rutas nombradas están disponibles en sus pruebas de aceptación / integración.

require "minitest_helper" describe "Homepage Acceptance Test" do it "must load successfully" do get root_path assert_response :success end end

Adopción

Creo que seguiremos viendo una mayor atención en el uso de Minitest con Rails a medida que nos acerquemos a Rails 4.

¿Vale la pena?

Creo que comenzar con Minitest ahora vale la pena. Hay una tremenda actividad en Minitest en este momento. Se alinea muy bien con el enfoque reciente en pruebas rápidas también. Pero realmente depende de la dinámica de tu aplicación y tu equipo.