Carriles Prueba funcional de URLs arbitrarias o personalizados
-
11-09-2019 - |
Pregunta
Tengo un recurso REST en mi Rails aplicación llamada "Foto". Estoy usando Paperclip para servir a diferentes "estilos" de mis fotos (por miniaturas y similares ), y estoy usando una ruta personalizada para acceder REST esos estilos:
map.connect "photos/:id/style/*style", :controller => "photos", :action => "show"
Eso está funcionando bien, pero quiero escribir una prueba para asegurarse de que siga siendo así.
Ya tengo una prueba funcional para llamar muestran la acción del controlador de fotos (generada por andamio de hecho):
test "should show photo" do
get :show, :id => photos(:one).to_param
assert_response :success
end
que pone a prueba la ejecución de la acción en la URL "/ foto / 1". Ahora quiero probar la ejecución de la URL "/ foto / 1 / estilo / foo". Por desgracia, me parece que no puede conseguir ActionController :: TestCase para golpear esa URL; el método get siempre quiere una acción / Identificación y no aceptará un sufijo URL.
¿Cómo hago para probar una URL personalizada?
Actualizar
Mientras que el registro sobre la respuesta de @ fernyb me encontré con este fragmento en la misma rdoc
En las pruebas se puede pasar simplemente el URL o la ruta denominada a GET o POST. def send_to_jail obtener '/ cárcel' assert_response: éxito assert_template "cárcel / frente" final
Sin embargo, cuando en realidad Trato que, me sale un mensaje de error:
test "should get photo" do
get "/photos/1/style/original"
assert_equal( "image/jpeg", @response.content_type )
end
ActionController::RoutingError: No route matches {:action=>"/photos/1/style/original", :controller=>"photos"}
Me pregunto si estoy haciendo algo mal.
Solución
Uso assert_routing
para probar las rutas:
assert_routing("/photos/10/style", :controller => "photos", :action => "show", :id => "10", :style => [])
assert_routing("/photos/10/style/cool", :controller => "photos", :action => "show", :id => "10", :style => ["cool"])
assert_routing("/photos/10/style/cool/and/awesome", :controller => "photos", :action => "show", :id => "10", :style => ["cool", "and", "awesome"])
prueba de integración a continuación, puede hacer:
test "get photos" do
get "/photos/10/style/cool"
assert_response :success
end
Otros consejos
A partir de la documentación de la API de Rails:
Ruta globbing
Especificación
*[string]
como parte de una regla como:map.connect '*path' , :controller => 'blog' , :action => 'unrecognized?'
se glob todas las partes restantes de la ruta que no fueron reconocidos más temprano. Los valores están en globbed
params[:path]
como una matriz de camino segmentos.
Así que parece que necesita para pasar los argumentos :path
, para poner a prueba la acción correctamente.