La URL de la página es algo así, /people?search=name
mientras que utilicé el current_pathmé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=namepero solo le importa que esté en la/peoplepágina independientemente del parámetro, puede enviar laonly_pathopció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_uriEs más sucinto. Ver la respuesta de @Lasse Bunk.ignore_query: truelugar deonly_path: trueReemplacé el método _path con _url para lograr comparar las URL completas con los parámetros.
fuente
current_pathen 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
shouldsintaxis. Debes esforzarte por usarexpect().totus especificaciones en el futuro.only_path: truees ahoraignore_query: trueSé 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.fullpathen 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_urlpuede contener un número de puerto. Por ejemplo, dado uncurrent_urldehttp://foo.com:8888/some/path,current_url[current_host.size..-1]será igual:8888/some/path. Además, detrás de escenacurrent_hosthace el mismo tipo deURI.parselógica que @nzifnab recomendó en la respuesta aceptada.