Rails 5.2.4.3
rspec-rails (4.0.1)
Railsにて初めて検索画面を作ってる初心者です。
検索の実行で正しいページに遷移したどうかをテストしてます。
ページのテストは今まで
ruby
1expect(page).to have_current_path(items_path)
のようにしてましたが、
今回はクエリ文字がエンコード&付与されるため、
"/items?search%5Bkeyword%5D=%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3"
のようなページがテスト対象になります。
このような場合、どのようにするのが一般的なのでしょうか?
【試したこと】
encode_www_form、encode_www_form_componentなどが
エンコードするメソッドだと分かり、以下のようにしました。
検索画面
html
1<form action="/items" accept-charset="UTF-8" method="get" class="navbar-form navbar-left"> 2 <div class="input-group"> 3 <input type="text" name="search[keyword]", class="form-control " placeholder="何かお探しですか?"> 4 <div class="input-group-btn"> 5 <button class="btn btn-default" type="submit" id="search_button"> 6 <i class="glyphicon glyphicon-search"></i> 7 </button> 8 </div> 9 </div> 10 </form>
encode_www_formを使ってみたパターン
ruby
1 2 3expect(page).to have_current_path(items_path + "?" + URI.encode_www_form(["search[keyword]", "パソコン"]))
すると生成されるURIは、以下のようになり
先頭から26文字目の1字が異なるだけで後は一緒のようです。
惜しいけど駄目でした。。。
欲しいURI "/items?search%5Bkeyword%5D=%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3" 生成された方 "/items?search%5Bkeyword%5D&%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3"
encode_www_form_component使ってみたパターン
ruby
1expect(page).to have_current_path(items_path + "?search%5Bkeyword%5D=" + URI.encode_www_form_component('パソコン'))
これだとマッチして通りましたが、search[keyword]をくっつける部分が何だかなぁ・・・て感じです。
メソッドの使い方を間違ってるでしょうか??
このようなテストをしたい場合、通常どうするものでしょうか?
諸先輩方アドバイス宜しくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/02 02:19
2020/07/03 08:25