質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

Q&A

解決済

1回答

2401閲覧

Rails チュートリアル 8章 ログイン機能 テストでエラー

退会済みユーザー

退会済みユーザー

総合スコア0

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

0グッド

1クリップ

投稿2020/04/02 16:35

前提・実現したいこと

独学でRails チュートリアル第4版をやっている初心者です。
第8章のログイン機能を実装する部分(リスト 8.23: 有効な情報を使ってユーザーログインをテストする)のテストが通らず困っています。
ブラウザでプレビューする限りだと、ログインやログアウトは正常に動いているように見えます。

基礎的なことで恐縮ですが、ご教授いただけますと幸いです。よろしくお願い致します。

発生している問題・エラーメッセージ

ERROR["test_login_with_valid_information_followed_by_logout", UsersLoginTest, 0.40693422299955273]
test_login_with_valid_information_followed_by_logout#UsersLoginTest (0.41s)
BCrypt::Errors::InvalidHash: BCrypt::Errors::InvalidHash: invalid hash
app/controllers/sessions_controller.rb:8:in 'create'
test/integration/users_login_test.rb:21:in 'block in class:UsersLoginTest'

該当のソースコード

(/sample_app/app/controllers/sessions_controller.rb) class SessionsController < ApplicationController def new end def create user = User.find_by(email: params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) log_in user redirect_to user else flash.now[:danger] = 'Invalid email/password combination' render 'new' end end def destroy log_out redirect_to root_url end end
(/sample_app/test/integration/users_login_test.rb) require 'test_helper' class UsersLoginTest < ActionDispatch::IntegrationTest def setup @user = users(:michael) end test "login with invalid information" do get login_path assert_template 'sessions/new' post login_path, params: { session: { email: "", password: "" } } assert_template 'sessions/new' assert_not flash.empty? get root_path assert flash.empty? end test "login with valid information followed by logout" do get login_path post login_path, params: { session: { email: @user.email, password: 'password' } } assert is_logged_in? assert_redirected_to @user follow_redirect! assert_template 'users/show' assert_select "a[href=?]", login_path, count: 0 assert_select "a[href=?]", logout_path assert_select "a[href=?]", user_path(@user) delete logout_path assert_not is_logged_in? assert_redirected_to root_url assert_select "a[href=?]", login_path assert_select "a[href=?]", logout_path, count: 0 assert_select "a[href=?]", user_path(@user), count: 0 end end
(/sample_app/app/models/user.rb) class User < ApplicationRecord before_save { email.downcase!} validates :name, presence: true, length: { maximum: 50} VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(.[a-z\d\-]+)*.[a-z]+\z/i validates :email, presence: true, length: {maximum: 255}, format: {with: VALID_EMAIL_REGEX}, uniqueness: {case_sensitive: false} has_secure_password validates :password, presence: true, length: { minimum: 6} def User.digest(string) cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost BCrypt::Password.create(string, cost: cost) end end

試したこと

"login with valid information followed by logout"

の中の、

post login_path, params: { session: { email: @user.email, password: 'password' } }

を、試しに

post login_path, params: { session: { email: "michael@example.com", password: 'password' } }

としてもだめでした。

補足情報(FW/ツールのバージョンなど)

AWS Cloud9を使用しています。
RailsのバージョンなどはRailsチュートリアルの指示通りやっているつもりです。

source 'https://rubygems.org' gem 'rails', '5.1.6' gem 'bcrypt', '3.1.12' gem 'puma', '3.9.1' gem 'sass-rails', '5.0.6' gem 'uglifier', '3.2.0' gem 'coffee-rails', '4.2.2' gem 'jquery-rails', '4.3.1' gem 'turbolinks', '5.0.1' gem 'jbuilder', '2.7.0' gem 'bootstrap-sass', '3.3.7' group :development, :test do gem 'sqlite3', '1.3.13' gem 'byebug', '9.0.6', platform: :mri end group :development do gem 'web-console', '3.5.1' gem 'listen', '3.1.5' gem 'spring', '2.0.2' gem 'spring-watcher-listen', '2.0.1' end group :test do gem 'rails-controller-testing', '1.0.2' gem 'minitest', '5.10.3' gem 'minitest-reporters', '1.1.14' gem 'guard', '2.13.0' gem 'guard-minitest', '2.4.4' end group :production do gem 'pg', '0.20.0' end # Windows環境ではtzinfo-dataというgemを含める必要があります gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ブラウザでプレビューする限りだと、ログインやログアウトは正常に動いているように見えます。

エラーの解決方法ですが、上記のように推測するのではなく、エラー文をきちんと読むことから始めると良いかと思います。


ERROR["test_login_with_valid_information_followed_by_logout", UsersLoginTest, 0.40693422299955273]

test_login_with_valid_information_followed_by_logoutでエラーが出た。

test_login_with_valid_information_followed_by_logout#UsersLoginTest (0.41s)

UsersLoginTestクラスのtest_login_with_valid_information_followed_by_logoutでエラーが出た

BCrypt::Errors::InvalidHash: BCrypt::Errors::InvalidHash: invalid hash

BCryptで無効なハッシュのエラーが出た。

app/controllers/sessions_controller.rb:8:in 'create'

sessions_controller.rbの8行目、createアクションでエラーが出た。

test/integration/users_login_test.rb:21:in 'block in class:UsersLoginTest'

users_login_test.rbの21行目、UsersLoginTestクラスでエラーが出た。


ということで、まずは「BCrypt::Errors::InvalidHash: チュートリアル」というキーワードで検索してみると解決につながるヒントを探すことができると思います。

投稿2020/04/02 22:46

編集2020/04/02 22:48
no1knows

総合スコア3365

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/04/02 23:03

ご回答ありがとうございます! どうやら(/sample_app/app/models/user.rb)に正しいコードは書かれてあったのですが、うまくsaveできてなかったようです。単純ミスでお手間をおかけしましてすみませんでした!
no1knows

2020/04/02 23:05

なにはともあれ解決してよかったです。 あと今後エラーの解決の流れを意識していただくと、とても役に立つと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問