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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top