La URL de la página es algo así, /people?search=name
mientras que utilicé el current_path
método de carpincho solo regresó /people
.
current_path.should == people_path(:search => 'name')
Pero falla diciendo
expected: "/people?search=name"
got: "/people"
¿Cómo podemos hacer que pase? ¿Hay alguna forma de hacer esto?
ruby-on-rails
ruby-on-rails-3
rspec
capybara
kriysna
fuente
fuente
"/people?search=name"
No es un camino ."/people"
es un caminoRespuestas:
He actualizado esta respuesta para reflejar las convenciones modernas en carpincho. Creo que esto es ideal ya que esta es la respuesta aceptada, y a lo que se refiere a muchas personas cuando buscan una solución. Dicho esto, la forma correcta de verificar la ruta actual es utilizar el
has_current_path?
comparador proporcionado por Capybara, como se documenta aquí: haga clic aquíEjemplo de uso:
Como puede ver en la documentación, hay otras opciones disponibles. Si la página actual es
/people?search=name
pero solo le importa que esté en la/people
página independientemente del parámetro, puede enviar laonly_path
opción:Además, si desea comparar la URL completa:
Gracias a Tom Walpole por señalar este método.
fuente
current_path.should ==
está funcionando por ahora (aunque necesito agregar una barra diagonal posterior como una cadena). Le agradezco de antemano el código que probablemente necesite.URI.parse(current_url).request_uri
Es más sucinto. Ver la respuesta de @Lasse Bunk.ignore_query: true
lugar deonly_path: true
Reemplacé el método _path con _url para lograr comparar las URL completas con los parámetros.
fuente
current_path
en las versiones más recientes de capibara y el partido contrapeople_path(...)
Simplemente actualizo esta pregunta para los tiempos modernos. La mejor práctica actual para verificar current_paths cuando se usa Capybara 2.5+ es usar el emparejador current_path, que usará el comportamiento de espera de Capybaras para verificar la ruta. Si desea verificar con request_uri (ruta y cadena de consulta)
Si solo desea la parte de la ruta (ignorando la cadena de consulta)
Si quiere coincidir con la url completa
el comparador tomará una cadena que se compara con == o una expresión regular para comparar con
fuente
should
sintaxis. Debes esforzarte por usarexpect().to
tus especificaciones en el futuro.only_path: true
es ahoraignore_query: true
Sé que se ha seleccionado una respuesta, pero solo quería dar una solución alternativa. Entonces:
Para obtener la ruta y la cadena de consulta, como
request.fullpath
en Rails, puede hacer:También puede hacer un método auxiliar en su clase de prueba (como
ActionDispatch::IntegrationTest
) como este (que es lo que hice):Espero que esto ayude.
fuente
EDITAR: como mencionó Tinynumberes, esto falla para las URL con número de puerto. Mantenerlo aquí en caso de que alguien más tenga la misma idea brillante.
golf exactamente igual (35 caracteres) como
URI.parse(current_url).request_uri
, pero es potencialmente más rápido porque no hay un análisis de URI explícito involucrado.He realizado una solicitud de extracción para agregar esto a Capybara en: https://github.com/jnicklas/capybara/pull/1405
fuente
current_url
puede contener un número de puerto. Por ejemplo, dado uncurrent_url
dehttp://foo.com:8888/some/path
,current_url[current_host.size..-1]
será igual:8888/some/path
. Además, detrás de escenacurrent_host
hace el mismo tipo deURI.parse
lógica que @nzifnab recomendó en la respuesta aceptada.