LoginSignup
0
0

More than 1 year has passed since last update.

【随時更新】RSpec でハマったエラー

Last updated at Posted at 2022-06-16

はじめに

初心者ですので、言葉足らずなところや間違えがあるかもしれません。
お気づきになりましたら、ご指摘いただけると嬉しいです。

ログインできない

エラーコード
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 が出来てしまっている場合も考えられるそうだが、上記の"ログインできない"エラーを解決すると同時に解消。
原因が分かり次第追記予定。

0
0
0

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
0
0