O URL da página é algo como /people?search=name
enquanto eu usava o current_path
método capivara, ele retornava /people
apenas.
current_path.should == people_path(:search => 'name')
Mas não diz
expected: "/people?search=name"
got: "/people"
Como podemos fazer isso passar? Existe alguma maneira de fazer isso?
ruby-on-rails
ruby-on-rails-3
rspec
capybara
kriysna
fonte
fonte
"/people?search=name"
não é um caminho ."/people"
é um caminhoRespostas:
Atualizei esta resposta para refletir as convenções modernas na capivara. Eu acho que isso é ideal, já que esta é a resposta aceita e o que muitas pessoas estão sendo consultadas ao procurar uma solução. Com isso dito, a maneira correta de verificar o caminho atual é usar o
has_current_path?
comparador fornecido pela Capivara, conforme documentado aqui: Clique AquiExemplo de uso:
Como você pode ver na documentação, outras opções estão disponíveis. Se a página atual estiver,
/people?search=name
mas você se importa apenas com a/people
página, independentemente do parâmetro, é possível enviar aonly_path
opção:Além disso, se você quiser comparar o URL inteiro:
Agradecemos a Tom Walpole por apontar esse método.
fonte
current_path.should ==
está funcionando no momento (embora eu precise adicionar uma barra à direita como uma string). Agradeço antecipadamente o código que provavelmente precisarei.URI.parse(current_url).request_uri
é mais sucinto. Veja a resposta do @Lasse Bunk.ignore_query: true
vez deonly_path: true
Substituí o método _path por _url para comparar os URLs completos com os parâmetros.
fonte
current_path
nas versões mais recentes da Capivara e compará-las com #people_path(...)
Apenas atualizando esta questão para os tempos modernos. A melhor prática atual para verificar current_paths ao usar o Capybara 2.5+ é usar o match_path current_path, que usará o comportamento de espera das Capivaras para verificar o caminho. Se desejar verificar o request_uri (caminho e sequência de consultas)
Se apenas desejar a parte do caminho (ignorando a cadeia de consulta)
Se desejar corresponder ao URL completo
o correspondente pegará uma sequência que seja comparada com == ou uma expressão regular para corresponder
fonte
should
sintaxe. Você deve se esforçar para usarexpect().to
suas especificações daqui para frente.only_path: true
agora éignore_query: true
Eu sei que uma resposta foi selecionada, mas eu só queria dar uma solução alternativa. Assim:
Para obter o caminho e a string de consulta, como
request.fullpath
no Rails, você pode:Você também pode fazer um método auxiliar em sua classe de teste (como
ActionDispatch::IntegrationTest
) assim (que foi o que eu fiz):Espero que isto ajude.
fonte
EDIT: como Tinynumberes mencionou, isso falha para URLs com número de porta. Mantê-lo aqui, caso mais alguém tenha a mesma idéia brilhante.
golfs tão bem (35 caracteres) quanto
URI.parse(current_url).request_uri
, mas é potencialmente mais rápido porque não há análise explícita de URI envolvida.Fiz uma solicitação pull para adicioná-lo à Capivara em: https://github.com/jnicklas/capybara/pull/1405
fonte
current_url
pode conter um número de porta. Por exemplo, dado umcurrent_url
dehttp://foo.com:8888/some/path
,current_url[current_host.size..-1]
será igual:8888/some/path
. Além disso, nos bastidores,current_host
faz o mesmo tipo deURI.parse
lógica que o @nzifnab recomendou na resposta aceita.