1. ホーム
  2. ruby-on-rails

[解決済み] Capybaraを使用してクエリ文字列でカレントパスを取得する方法

2022-05-02 21:25:53

質問

ページのURLは次のようなものです。 /people?search=name を使いながら current_path メソッドを実行すると /people だけです。

current_path.should == people_path(:search => 'name')

しかし、次のように失敗します。

expected: "/people?search=name"
got: "/people"

どうすれば合格になるのでしょうか?何か方法があるのでしょうか?

どのように解決するのですか?

カピバラさんにおける現代の慣習を反映させるために、この回答を更新しました。これが一般的な答えであり、多くの人が解決策を探しているときに参照されているものなので、これが理想的だと考えています。とはいえ、現在のパスをチェックする正しい方法は has_current_path? は、Capybaraが提供するマッチャーで、ここに文書化されています。 ここをクリック

使用例です。

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に感謝します。