現場で使える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: 'a@example.com'
  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: 'a@example.com'
   fill_in "password", with: 'password'
試しにこちらのコードを、
   fill_in "session_email", with: 'a@example.com'
   fill_in "session_password", with: 'password'
このように、labelでなくテキストフィールド側のIDに合わせてみたところ、無事に値を渡せて、テスト通りました!
ラベルテキストで上手く特定が出来ないときは、テキストフィールドにIDを付与してやって、そちらで探すといいかもです。