前提・実現したいこと
Rails(devise)で作成した新規登録のformに、jQueryでエラーメッセージの表示とその箇所への自動スクロール機能を実装しました。
0. 未入力のままtext_fieldからフォーカスが外れるとエラーメッセージが表示される
0. そのまま新規登録しようとすると、submitは中断され、エラーメッセージがウィンドウ中央になるように自動でスクロールされる。
この機能をsystem specでテストしようと思ったのですが、記述方法が分からずうまくいきません。アドバイスいただけないでしょうか。
該当のソースコード
haml
1.new-user-title 2 新規登録 3 4 .new-user-form 5 = form_for(resource, as: resource_name, url: registration_path(resource_name), html: {id: 'new-user'}) do |f| 6 7 .new-user-employee 8 = f.label :employee_id, '社員ID', class: 'new-user-employee__title-label' 9 = f.text_field :employee_id, autocomplete: "username", id: 'user-employee', class: 'new-user-employee__input-text' 10 11 ------------------- (中略) ------------------- 12 13 .new-user-actions 14 = f.submit "新規登録", class: 'user-register-button'
jQuery
1(document).on('turbolinks:load', function(){ 2 $('#user-employee').blur(function(){ 3 if ($(this).val() == '') { 4 $(this).before(`<div id='presence-error' class='error-message'>社員IDを入力してください</div>`); 5 $(this).addClass('error-frame'); 6 }; 7 }); 8 9 $('#new-user').submit(function() { 10 if ($('div').hasClass('error-message')) { 11 let errorPosition = $('.error-message').offset().top 12 let whindowHalf = $(window).height() / 2 13 $('html, body').animate({scrollTop:(errorPosition - whindowHalf)}) 14 return false; 15 }; 16 }); 17});
RSpec
1RSpec.describe 'Users', type: :system do 2 describe '新規登録', js: true do 3 it '新規登録ボタンを押した時、エラー箇所まで自動スクロールされること' do 4 fill_in 'user[employee_id]', with: '' 5 click_on '新規登録' 6 expect(page).to have_content '社員IDを入力してください' 7 end 8 end 9end 10
上記の状態でRSpecを実行すると、jQueryの.submitの記述があってもなくてもテストが通ってしまいます。
試したこと
- GitHub/Capybaraを参考に、
page.save_screenshot('screenshot.png')
でスクリーンショットを確認すると、ページ全体がブラウザ画面に収まってしまっていた。そこで、page.driver.browser.manage.window.resize_to(500, 100)
をRSpecに追加し、ウィンドウのサイズを縮小。
=> 変化なし [原因] rspec + capybaraのpageの中身 - xengineer's diaryを参考にputs page.body
でpageの中身を確認すると、hamlのbody全てが対象になっていました。
ecpect(page).to have_content
のpage
部分を現在ウィンドウで表示されている場所にすればいいと考えググってみる。
=> 見つかりませんでした。
補足情報(FW/ツールのバージョンなど)
rails (6.0.3.2)
ruby (2.7.1)
rspec-rails (4.0.1)
capybara (3.33.0)
selenium-webdriver (3.142.7)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/13 07:32 編集
2020/09/13 12:08
2020/09/13 13:42