1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rspec】fill_inがうまく動作せずとても悩んだので備忘録【capybara】

Last updated at Posted at 2021-02-16

「現場で使える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を使ったユーザーログインのテストで、

tasks_spec.rb
context 'ユーザーがAがログインしているとき' do
before do
    visit login_path #このURLでアクセスする
    fill_in 'メールアドレス', with: 'a@example.com' #メールフォームにa@example.comを入力
    fill_in 'パスワード', with: 'password' #パスワードフォームにpasswordという文字列を入力
    click_button 'ログインする' #ログインボタンを押す
end

と教科書通り入力しても、エラーが出て実行されず、、、
スクリーンショット 2021-02-16 12.25.29.png

どうやら、'メールアドレス'で、views側の入力フォームのラベルを指定しているのですが、
それがうまくいかずに、'a@example.com'がキチンと入力フォームに代入されていないことが原因のようです。

fill_inに参照させる値を変更する

つまり、ラベル以外の要素で参照させてあげれば、上手くいくのでは、、、?
と思い、Google Chormeの検証で、ソースコードを確認することに。(ソースコード直接見たらええやんって声も聞こえてきそうですが、この技術書ではHTML短縮記法のslimを用いて書いていますので今回は割愛。)
見てみると、、、スクリーンショット 2021-02-16 12.33.33.png
name="session[email]"の部分で読み込ませると、無事に値を渡せることができました!!
ハマると泥沼な凡ミス

ちなみにその後Chapter5-11で、値を渡す部分(with:'〇〇')がlogin_user.emailとlogin_user.passwordと言う変数に変わります。
理由としてはユーザーAだろうがユーザーBだろうが誰がログインしても同じログイン処理コードを使えるようするためなのですが、
その時に元々は文字列を入れていたのでシングルクォーテーションを付ける必要があったのですが、変数の場合は当たり前ですがシングルクォーテーションを外す必要があります。
自分はこの凡ミスで半日程無駄にしました、、、泣

まとめ

まとめると、
・fill_inはラベルで参照できない時は、view側(またはchromeの検証)を確認して、IDやnameを指定して上げてください!
・変数にシングルクォーテーションはダメ絶対!!

以上です。
最後まで閲覧頂き、誠にありがとうございました!!

1
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?