【RSpec/capybara】fill_inが上手く動作しない
現場で使えるRuby on Rails5 速習実践ガイドの、Chapter5-8(テスト周り)で詰まったのでメモ。
ログインのテストに失敗
RSpecのfill_inというメソッドを使って、ログインフォームに値を渡した後、投稿が反映されているか確認するというテストでしたが、下記のエラーが出て何度やっても上手くいかず。
Failures:
1) タスク管理機能 一覧機能表示 ユーザーがAがログインしている時 ユーザーAが作成したタスクが表示される
Failure/Error: expect(page).to have_content '最初のタスク'
expected to find text "最初のタスク" in "Taskleaf\nログイン\nメールアドレス\nパスワード"
エラーのスクショを確認したところ、ログイン失敗どころかログインフォームに値を渡すことすら出来てなかったことが判明。
見事に何も入ってない。
どうやら間違えていたのはfill_inの使い方だったようです。
fill_inの書き方を変える
失敗時のコードがこちら。
テスト側
context 'ユーザーがAがログインしているとき' do
before do
# ユーザーAでログインする
visit login_path
fill_in "email", with: '[email protected]'
fill_in "password", with: 'password'
click_button 'ログインする'
end
ビュー側
h1 ログイン
= form_with scope: :session, local: true do |f|
.form-group
= f.label :email, 'メールアドレス'
= f.text_field :email, class: 'form-control', id: 'session_email'
.form-group
= f.label :email, 'パスワード'
= f.password_field :password, class: 'form-control', id: 'session_password'
= f.submit 'ログインする', class: 'btn btn-primary'
教科書通りにやっても上手く値を渡せず...
fill_in "email", with: '[email protected]'
fill_in "password", with: 'password'
試しにこちらのコードを、
fill_in "session_email", with: '[email protected]'
fill_in "session_password", with: 'password'
このように、labelでなくテキストフィールド側のIDに合わせてみたところ、無事に値を渡せて、テスト通りました!
ラベルテキストで上手く特定が出来ないときは、テキストフィールドにIDを付与してやって、そちらで探すといいかもです。
Author And Source
この問題について(【RSpec/capybara】fill_inが上手く動作しない), 我々は、より多くの情報をここで見つけました https://qiita.com/Takara1356/items/cc8535c4a6e66c5977e2著者帰属:元の著者の情報は、元の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 .