Prueba de rutas de rieles: no se pueden encontrar los métodos ActionController :: Assertions :: RoutingAssertions
-
05-07-2019 - |
Pregunta
Estoy intentando probar las rutas en mi aplicación de rieles 2.3.4. Hay varios sitios que explican cómo probar rutas, incluida la documentación de Rails, pero recibo errores siguiendo las instrucciones.
Primero, asumo que estas pruebas se pueden realizar en archivos de prueba de unidad relacionados. Parece que no hay lugar más obvio, y ninguno de los documentos especifican.
Dicho esto, esta es una versión condensada de test/unit/TitlesTest.rb
require File.dirname(__FILE__) + '/../test_helper'
class TitleTest < Test::Unit::TestCase
# include ActionController::Assertions::RoutingAssertions
def test_routes
assert_routing "games", { :controller => "titles", :section => "games", :action => "index", :id => nil }
end
end
rake test: units
falla con el error:
NoMethodError: undefined method `assert_routing' for #<TitleTest:0x7f387232ec98>
/test/unit/title_test.rb:7:in `test_routes'
En la API de Rails vi que assert_routing está definido en ActionController :: Assertions :: RoutingAssertions
, por lo que intenté incluir ese módulo, solo para que falle en otro lugar.
Observe la línea include
comentada en el ejemplo de código anterior.
NoMethodError: undefined method `clean_backtrace' for #<TitleTest:0x7fd895fadf00>
/test/unit/title_test.rb:7:in `test_routes'
clean_backtrace
es otro método de prueba definido en ActionController :: TestCase :: Assertions.
No obtengo ningún resultado de búsqueda de Google para estos errores, nadie más parece tener este problema. El problema también ocurre si vuelvo a crear el escenario en una aplicación Rails recién generada. No creo que deba tener que incluir estos módulos en mis casos de prueba. ¿Qué podría estar mal aquí?
Solución
Hay una lista de actualizando Rails gotchas en los robots gigantes. Aparentemente, su prueba de enrutamiento debe usar la clase ActionController :: TestCase
, no ActiveSupport :: TestCase
.
Otros consejos
Las pruebas de enrutamiento deben realizarse como parte de las pruebas de integración.
Se pueden generar utilizando script / generar script / generar integration_test rutas
Un ejemplo:
class RoutesTest < ActionController::IntegrationTest
fixtures :all
def test_resources_route
assert_routing "titles/15", { :controller => "titles", :action => "show", :id => "15" }
end
end
El archivo de prueba de la unidad de enrutamiento debe incluir el módulo ActionController :: Assertions :: RoutingAssertions
desde Rails 2.3.2.