はじめに
初心者ですので、言葉足らずなところや間違えがあるかもしれません。
お気づきになりましたら、ご指摘いただけると嬉しいです。
ログインできない
エラーコード
Failure/Error:
expect(current_path).to eq(root_path)
expected: "/"
got: "/users/sign_in"
(compared using ==)
"/"に遷移しようとしたけど、結果は"/users/sign_in"ですよ。
つまり、遷移できずにログインページのままになりエラー。
ソースコード(一部)
system/users_spec.rb
#省略
# 正しいユーザー情報を入力する
fill_in 'email', with: @user.email
fill_in 'password', with: @user.password
# ログインボタンを押す
find('input[name="commit"]').click
# トップページへ遷移することを確認する
expect(current_path).to eq(root_path)
エラー発生状況
ログインテストコード実行時、
ログインボタンを押す処理
↓
トップページへ遷移したことを確認する←ここで発生
原因
spec/factories/user.rbに記述していた
password { Faker::Lorem.characters(number: 6, min_alpha: 1, min_numeric: 1) }
#これ↓
encrypted_password { password }
が不要なコードだった。
理由
encrypted_passwordはパスワードを暗号化した値が入るので、factoryでは不要。
パラメータで送られたパスワードが暗号化されていたことから、値が相違しエラーになっていたことが原因だった。
raise Errors::InvalidHash.new("invalid hash")
エラーコード
Failure/Error: raise Errors::InvalidHash.new("invalid hash")
BCrypt::Errors::InvalidHash:
invalid hash
ソースコード(一部)
# 正しいユーザー情報を入力する
fill_in 'email', with: @user.email
fill_in 'password', with: @user.password
# ログインボタンを押す
find('input[name="commit"]').click
# トップページへ遷移することを確認する
expect(current_path).to eq(root_path)
# トップページにログアウトボタンがあることを確認する
expect(page).to have_content('ログアウト')
エラー発生状況
ログインテストコード実行時、
ログインボタンを押す処理
↓
トップページへ遷移したことを確認する←ここで発生
原因
bcrypt のバージョンが上がり、ハッシュ化の形式が変わったためにこのエラーが出ることや、開発途中で、パスワードが入っていない状態の User が出来てしまっている場合も考えられるそうだが、上記の"ログインできない"エラーを解決すると同時に解消。
原因が分かり次第追記予定。