2010-12-16 12 views
6

Quiero crear una solicitud get en rspec.llame a una url específica con rspec

get :exec, {:query=>"bla", 
     :id => "something", 
     :user_id => "user" 
    } 

Esto genera una URL como: /user/query/something/exec?query=bla

Lo que pasa es que mi controlador comprueba la solicitud se pone y la url debe verse como: /user/query/something/_XXX_/exec?query=bla

¿Cómo puedo hacer algo como esto en rspec? (El XXX está codificado en el archivo routes.rb)

+0

Me tomé la libertad de agregar la etiqueta ruby-on-rails. Si eso fue un error, lo eliminaremos. –

Respuesta

16

Supongo que se refiere a una especificación del controlador.

Cuando pasa un hash como en su ejemplo, las claves se compararán con las variables en sus rutas. Para cualquier clave que no coincida con la ruta, el par clave/valor se agregará como una cadena de consulta.

Por ejemplo, suponga que tiene esto en su especificación:

get :exec, :query => 'foo', :id => '1', :user_id => 42 

Y tiene esto en sus rutas (carriles 3 Estilo):

match '/exec/:user_id/:id' => 'whatever#exec' 

La especificación se sustituya en la clave/pares de valores que ha dado y simular una solicitud con la siguiente ruta:

/exec/42/1?query=foo 

Así que, para cablear su s Pecs a sus rutas, solo asegúrese de que está haciendo coincidir los nombres de las variables en sus rutas con los parámetros en su solicitud de especificación.

+0

El problema principal de mi pregunta es el "XXX", como se dijo, está codificado en el archivo de rutas (estoy haciendo esto porque necesito rutas con nombre) entonces no hay: parámetro lang, algo/XXX/exec? query = bla y algo/YYY/exec? query = bla son URL de vaild y solo uno de ellos (el primero en el archivo de rutas) se puede crear a través de rspecs get ... – Stephan

+1

No sé si RSpec hace posible elija una ruta nombrada particular sobre otra. Creo que siempre elegirá la primera ruta que coincida con tus parámetros. Creo que esto es por diseño: RSpec quiere que pruebes las cosas de forma aislada, p. su controlador aislado de sus rutas. Supongo que siempre se puede piratear anulando el método que devuelve la URL de solicitud. – rlkw1024

Cuestiones relacionadas