2011-03-22 18 views
9

Estoy utilizando los carriles 3.0.5, rspec2 con el último capibara.ruta de acceso no funciona correctamente al utilizar capybara

Rutas configuración como:

scope "(:locale)", :locale => /de|fr|it|en/ do 
    resources :dossiers 
end 

En application_controller tengo esto:

def default_url_options(options={}) 
    options[:locale] = "es" 
    options 
end 

Así que en mi punto de vista puedo usar

link_to 'test', dossier_path(1) 

sin ningún problema.

Pero cuando hago lo mismo en la visita de capibara, intenta usar el 1 para la configuración regional y no para la identificación. Sólo funciona cuando uso

visit dossier_path(nil, 1) 

o

visit dossier_path(:id => 1) 

pero ambos son feos y se ve como un truco sucio. Entonces, ¿por qué necesito usar este truco sucio y qué debo hacer para que pueda usar los métodos de ruta igual que en las vistas (sin el sucio truco de tener que agregar nil o pasar explícitamente: id =>. ..)? :)

+0

El título de su pregunta indica que se trata de una respuesta en lugar de una pregunta. Después de leer el contenido, esta impresión no cambió mucho. ¿Qué estás buscando exactamente? – polarblau

+0

Estoy buscando una respuesta por la cual necesito usar el hack sucio que mostré y lo que puedo hacer, para poder usar el método al igual que en las vistas (sin el sucio truco de tener que agregar nil o pasar explícitamente) id => ...). – gucki

+0

Lo siento, acabo de ver que el título era incorrecto. En lugar de "ahora" debería haber sido "no", simplemente lo arreglé;) – gucki

Respuesta

-1

opuesto como se indica here bajo El uso de Carpincho con RSpec la única manera que he sido capaz de hacerlo funcionar está escribiendo

visit user_path(:id => myuser.id.to_s) 

por lo que para que se debería ser

visit dossier_path(:id => "1") 

¿Funciona?

+0

Disculpe, no veo cómo se relaciona esto con mi pregunta sobre las opciones de URL predeterminadas que no se están utilizando. – gucki

2

Lamentablemente, la generación de ruta ocurre fuera del controlador de la aplicación. Y Capybara no hace ninguna magia para proporcionar opciones predeterminadas de URL para enrutar ayudantes.

Pero puede especificar regional predeterminada dentro de su routes.rb

scope "(:locale)", :locale => /de|fr|it|en/, :defaults => { :locale => "es" } do 
    resources :dossiers 
end 

Y ahora, si usted no pasa: la opción de configuración regional a un ayudante ruta por defecto lo "es". En realidad, ya no es necesario mantener def default_url_options en su controlador.

+1

¿Qué hay de los valores predeterminados que dependen del usuario actual, por ejemplo? – gucki

+0

Esta es una mala respuesta, incluso la he votado al principio. Hace que tus pruebas pasen, pero la mitad del enlace de la aplicación se está quedando atrapado en la configuración regional predeterminada. – firedev

7

Me encontré con un problema similar. Puede configurar los default_url_options en un bloque antes como éste en la solicitud de especificaciones:

before :each do 
    app.default_url_options = { :locale => :es } 
end 
+0

Solo para poner un poco más de contexto para esto: El código anterior debe estar en algún lugar dentro del bloque 'Rspec.configure do | config |'. – Lenart

2

estoy rieles 3.2.6 correr y usar una técnica que he encontrado aquí https://github.com/rspec/rspec-rails/issues/255 bajo el comentario de Phoet. Simplemente coloque esto en algún lugar de/spec/support y debería cubrir todas sus especificaciones

class ActionView::TestCase::TestController 
    def default_url_options(options={}) 
    { :locale => I18n.default_locale } 
    end 
end 

class ActionDispatch::Routing::RouteSet 
    def default_url_options(options={}) 
    { :locale => I18n.default_locale } 
    end 
end 
Cuestiones relacionadas