- 更新日: 2014年3月6日
- RSpec
フォームの input フィールドの value 値を RSpec + Capybara でテスト
スポンサーリンク
フォーム要素の input フィールドの value 値が正しい値となっているかをテストする方法。User モデルのビューでよくある感じの以下のような input フィールドを例とします。
1 2 |
<input id="user_email" name="user[email]" type="email" value="user@example.com" /> <input id="user_name" name="user[name]" type="text" value="use_name_example" /> |
【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
スポンサーリンク
— 環境 —
rails-4.0.1
rspec-rails-2.14.0
capybara-2.2.0
should have_xpath を使う
これらのフォーム input フィールドの value 値が正しく出力されているか、あるいは空になっているかをテストしたいケースがありました。先に結論から言うと、実際に正しく動作したテストコードは以下。user が User モデルのオブジェクトとなっています。
1 |
it { should have_xpath("//input[@id='user_email'][@value='#{user.email}']") } |
have_css, have_selector では動かなかった
最初、have_css, have_selector を試したのですが、上手くテストが動作しませんでした。
1 |
it { should have_css("input#user_email", value: user.email) } |
これは以下のエラー。
1 2 3 4 5 |
Failure/Error: it { should have_css("input#user_email", value: user.email) } ArgumentError: invalid keys :value, should be one of :text, :visible, :between, :count, :maximum, :minimum, :exact, :match, :wait |
have_selector に変えてみるも…
1 |
it { should have_selector("input#user_email", value: user.email) } |
同様のエラー。
1 2 3 4 5 |
Failure/Error: it { should have_selector("input#user_email", value: user.email) } ArgumentError: invalid keys :value, should be one of :text, :visible, :between, :count, :maximum, :minimum, :exact, :match, :wait |
ということで、最初に紹介した XPath で指定する方法を利用しました。
- – 参考リンク –
- ruby on rails – How can I check that a form field is prefilled correctly using capybara? – Stack Overflow
- Rspec Rails cheatsheet (include capybara matchers)
スポンサーリンク
私は Rails のテストフレームワークには RSpec を使っています。サーバーのテスト用に Serverspec もおすすめです。
>> 次の記事 : RSpecでAjaxリクエストに対しRequest Spec(結合テスト)を行う
- RSpec の関連記事
- FactoryGirlをSpringと共に使う時の注意
- 複数モデルのpost :createをテストするRSpecコード(Controller Spec)
- RSpec3でTime.nowをスタブ化(stub)
- RSpecでJSONによるPOSTリクエストをテスト
- RSpec & Capybara の雑感
- RSpec+Capybaraで同名の複数要素の並び順をテストする
- RSpec3ではrails_helper.rbがrequireされる
- Capybara + Launchy で RSpec テストをブラウザで確認
- CapybaraのwithinをRSpecで使う
- Serverspec(RSpec)のテスト出力に色を付けて見やすくフォーマット
- 1件のコメント
capybara 3.6.0 で試したところ、次のような書き方でいけるみたいです。
it { should have_field("user[email]", with: user.email) }
参考まで。