【Rspec】fill_inがうまく動作せずとても悩んだので備忘録【capybara】
「現場で使えるRuby on Rails5 速習実践ガイド」Chapter5-8,5-11(FutureTest)のfill_inで詰まったので備忘録。
・環境
PC : MacBook Pro(2018)
OS : mac os Big Sur ver. 11.1
editor : Vscode ver.1.53.2
・言語&ライブラリ
Ruby : 2.6.3
RubyonRails : 6.1.1
Rspec : 3.10
Capybara : 3.34.0
FactoryBot : 6.1.0
ログインテスト失敗
Chapter5-8-3のRspec&Capybaraを使ったユーザーログインのテストで、
context 'ユーザーがAがログインしているとき' do
before do
visit login_path #このURLでアクセスする
fill_in 'メールアドレス', with: '[email protected]' #メールフォームに[email protected]を入力
fill_in 'パスワード', with: 'password' #パスワードフォームにpasswordという文字列を入力
click_button 'ログインする' #ログインボタンを押す
end
どうやら、'メールアドレス'で、views側の入力フォームのラベルを指定しているのですが、
それがうまくいかずに、'[email protected]'がキチンと入力フォームに代入されていないことが原因のようです。
fill_inに参照させる値を変更する
つまり、ラベル以外の要素で参照させてあげれば、上手くいくのでは、、、?
と思い、Google Chormeの検証で、ソースコードを確認することに。(ソースコード直接見たらええやんって声も聞こえてきそうですが、この技術書ではHTML短縮記法のslimを用いて書いていますので今回は割愛。)
見てみると、、、
name="session[email]"の部分で読み込ませると、無事に値を渡せることができました!!
ハマると泥沼な凡ミス
ちなみにその後Chapter5-11で、値を渡す部分(with:'〇〇')がlogin_user.emailとlogin_user.passwordと言う変数に変わります。
理由としてはユーザーAだろうがユーザーBだろうが誰がログインしても同じログイン処理コードを使えるようするためなのですが、
その時に元々は文字列を入れていたのでシングルクォーテーションを付ける必要があったのですが、変数の場合は当たり前ですがシングルクォーテーションを外す必要があります。
自分はこの凡ミスで半日程無駄にしました、、、泣
まとめ
まとめると、
・fill_inはラベルで参照できない時は、view側(またはchromeの検証)を確認して、IDやnameを指定して上げてください!
・変数にシングルクォーテーションはダメ絶対!!
以上です。
最後まで閲覧頂き、誠にありがとうございました!!
Author And Source
この問題について(【Rspec】fill_inがうまく動作せずとても悩んだので備忘録【capybara】), 我々は、より多くの情報をここで見つけました https://qiita.com/SyoInoue/items/8efa78dbae26d66f9165著者帰属:元の著者の情報は、元の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 .