HTML5のフォームバリデーションメッセージをテストする
経緯
phantomjsがメンテされないこともあり、capybaraのドライバーをpoltergeistからchrome(headless)に移行しました。
移行についてはこの記事がよくまとまっていました。感謝
RSpec の feature spec でヘッドレス Chrome を使う - Speee DEVELOPER BLOG
APIの修正(.trigger('click')
→.click
など)をすればいいかなーと思っていたら、HTML5のフォームバリデーションが有効になったおかげ?で、一部のfeatureテストが通らなくなりました。
不正値のfeature specが通らなくなる
今まではフォームに不正値を入力して送信ボタンを押下した場合、アプリケーション側(rails)でバリデーションして、その結果を検証していました。
こういうやつ
context 'emailのフォーマットが間違ってる場合' do
scenario '登録に失敗する' do
fill_in 'email', with: 'hogehoge'
click_on '登録する'
expect(page).to have_content('メールアドレスの形式が不適切です')
end
end
しかし、HTML5のバリデーションに引っかかるようになったため、そもそもアプリケーション側にリクエストが届かなくなり、rails側が返却したエラーメッセージを検証できなくなりました。
こいつに阻まれる
どうやら、featureテストではrailsでの検証ではなくHTML5のフォームバリデーションの検証をする必要がありそうです。
HTML5のバリデーションメッセージを検証する
いろいろ探した結果、この記事にたどりつきました。
Testing HTML5 Messages with RSpec/Selenium – Mike Schutte – Medium
featureテストも以下のように書き換えました。
context 'emailのフォーマットが間違ってる場合' do
scenario '登録に失敗する' do
fill_in 'email', with: 'hogehoge'
click_on '登録する'
message = page.find('#email').native.attribute('validationMessage')
expect(message).not_to be_empty
end
end
バリデーションのメッセージ自体はカスタマイズできるので、「設定した値が表示されているか」の検証もできるといいですね
おしまい
参考
Author And Source
この問題について(HTML5のフォームバリデーションメッセージをテストする), 我々は、より多くの情報をここで見つけました https://qiita.com/paranishian/items/8d936b952b209fb8d8f0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .