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?
Codificar la configuración de MiniTest :: Spec de Ningja con Capybara in Rails 3.1 ayudó mucho con la integración de Minitest con Rails.
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
La gema minitest-rails lo hace fácil.
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.
Trabajé un poco los últimos días para hacer que probar Rails con minitest fuera muy sencillo. Consulte http://rawonrails.blogspot.com/2012/01/better-way-of-testing-rails-application.html para obtener más información.