ページのURLは/people?search=name
のようなものですが、capybaraのcurrent_path
メソッドを使用したときに/people
のみが返されました。
current_path.should == people_path(:search => 'name')
しかし、それは言って失敗します
expected: "/people?search=name"
got: "/people"
どうすれば合格できますか?これを行う方法はありますか?
カピバラの現代の慣習を反映するために、この回答を更新しました。これは受け入れられる答えであり、解決策を探す際に多くの人が言及しているものなので、これは理想的だと思います。とはいえ、現在のパスを確認する正しい方法は、ここに記載されているように、Capybaraが提供するhas_current_path?
マッチャーを使用することです。 ここをクリック
使用例:
expect(page).to have_current_path(people_path(search: 'name'))
ドキュメントで見ることができるように、他のオプションが利用可能です。現在のページが/people?search=name
であるが、パラメーターに関係なく/people
ページにあることだけを気にする場合、only_path
オプションを送信できます。
expect(page).to have_current_path(people_path, only_path: true)
さらに、URL全体を比較する場合:
expect(page).to have_current_path(people_url, url: true)
この方法を指摘してくれたTom Walpoleに感謝します。
完全なURLとパラメーターを比較するために、_pathメソッドを_urlに置き換えました。
current_url.should == people_url(:search => 'name')
この質問を現代のために更新するだけです。 Capybara 2.5+を使用するときにcurrent_pathsをチェックするための現在のベストプラクティスは、current_pathマッチャーを使用することです。これは、Capybarasの待機動作を使用してパスをチェックします。 request_uri(パスとクエリ文字列)をチェックする場合
expect(page).to have_current_path(people_path(:search => 'name'))
パス部分のみが必要な場合(クエリ文字列を無視)
expect(page).to have_current_path(people_path, only_path: true) # Capybara < 2.16
expect(page).to have_current_path(people_path, ignore_query: true) # Capybara >= 2.16
完全なURLに一致させたい場合
expect(page).to have_current_path(people_url, url: true) # Capybara < 2.16
expect(page).to have_current_path(people_url) # Capybara >= 2.16
マッチャーは、==または照合する正規表現と比較される文字列を受け取ります
expect(page).to have_current_path(/search=name/)
回答が選択されていることは知っていますが、代替ソリューションを提供したかっただけです。そう:
Railsのrequest.fullpath
などのパスとクエリ文字列を取得するには、次のようにします。
URI.parse(current_url).request_uri.should == people_path(:search => 'name')
また、テストクラスで(ActionDispatch::IntegrationTest
などの)ヘルパーメソッドを次のように実行することもできます(これは私がやったことです)。
def current_fullpath
URI.parse(current_url).request_uri
end
お役に立てれば。
編集:Tinynumberesが言及したように、これはポート番号を持つURLに対して失敗します。他の誰かが同じ素晴らしいアイデアを持っている場合に備えて、ここに保管してください。
current_url[current_Host.size..-1]
URI.parse(current_url).request_uri
とまったく同じ(35文字)ですが、明示的なURI解析が含まれていないため、潜在的に高速です。
これをカピバラに追加するプルリクエストを作成しました: https://github.com/jnicklas/capybara/pull/1405