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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

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

Q&A

解決済

1回答

1236閲覧

Rails Tutorial 11章「11.3.3 有効化のテストとリファクタリング」のテストでエラーが発生してしまう

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

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

0グッド

0クリップ

投稿2020/05/03 23:48

前提・実現したいこと

Rails Tutorial 11章「11.3.3 有効化のテストとリファクタリング」テストでのエラーを解消したいです。
user_signup_test.rbassert user.reload.activated?が原因のようです。

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

$ rails test Running via Spring preloader in process 21876 Started with run options --seed 8257 FAIL["test_valid_signup_information_with_account_activation", UsersSignupTest, 1.4388678050017916] test_valid_signup_information_with_account_activation#UsersSignupTest (1.44s) Expected false to be truthy. test/integration/users_signup_test.rb:44:in `block in <class:UsersSignupTest>' 38/38: [=====================================] 100% Time: 00:00:01, Time: 00:00:01 Finished in 1.50810s 38 tests, 161 assertions, 1 failures, 0 errors, 0 skips

該当のソースコード

rails

1(account_activations_controller.rb) 2class AccountActivationsController < ApplicationController 3 4 def edit 5 user = User.find_by(email: params[:email]) 6 if user && !user.activated? && user.authenticated?(:activation, params[:id]) 7 user.update_attribute(:activated, true) 8 user.update_attribute(:activated_at, Time.zone.now) 9 log_in user 10 flash[:success] = "Account activated!" 11 redirect_to user 12 else 13 flash[:danger] = "Invalid activation link" 14 redirect_to root_url 15 end 16 end 17end

rails

1(users_signup_test.rb) 2require 'test_helper' 3 4class UsersSignupTest < ActionDispatch::IntegrationTest 5 6 def setup 7 ActionMailer::Base.deliveries.clear 8 end 9 10 test "invalid signup information" do 11 get signup_path 12 assert_no_difference 'User.count' do 13 post users_path, params: { user: { name: "", 14 email: "user@invalid", 15 password: "foo", 16 password_confirmation: "bar" } } 17 end 18 assert_template 'users/new' 19 assert_select 'div#error_explanation' 20 assert_select 'div.field_with_errors' 21 end 22 23 test "valid signup information with account activation" do 24 get signup_path 25 assert_difference 'User.count', 1 do 26 post users_path, params: { user: { name: "Example User", 27 email: "user@example.com", 28 password: "password", 29 password_confirmation: "password" } } 30 end 31 assert_equal 1, ActionMailer::Base.deliveries.size 32 user = assigns(:user) 33 assert_not user.activated? 34 # 有効化していない状態でログインしてみる 35 log_in_as(user) 36 assert_not is_logged_in? 37 # 有効化トークンが不正な場合 38 get edit_account_activation_path("invalid token", email: user.email) 39 assert_not is_logged_in? 40 # トークンは正しいがメールアドレスが無効な場合 41 get edit_account_activation_path(user.activation_token, email: 'wrong') 42 assert_not is_logged_in? 43 # 有効化トークンが正しい場合 44 get edit_account_activation_path(user.activation_token, email: user.email) 45 assert user.reload.activated? 46 follow_redirect! 47 assert_template 'users/show' 48 assert is_logged_in? 49 end 50end

rails

1(sessions_controller.rb) 2class SessionsController < ApplicationController 3 4 def new 5 end 6 7 def create 8 user = User.find_by(email: params[:session][:email].downcase) 9 if user && user.authenticate(params[:session][:password]) 10 if user.activated? 11 log_in user 12 params[:session][:remember_me] == '1' ? remember(user) : forget(user) 13 redirect_back_or user 14 else 15 message = "Account not activated. " 16 message += "Check your email for the activation link." 17 flash[:warning] = message 18 redirect_to root_url 19 end 20 else 21 flash.now[:danger] = 'Invalid email/password combination' 22 render 'new' 23 end 24 end 25 26 def destroy 27 log_out if logged_in? 28 redirect_to root_url 29 end 30end

試したこと

スペルミスかと思いtutorialをコピペしてみましたが、結果は同じでした。
すみませんがアドバイスをお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

user.rbの記載ミスでした。お騒がせしました。

修正前

rails

1 def authenticated?(attribute, token) 2 digest = self.send("#{attribute}_digest") 3 return false if digest.nil? 4 BCrypt::Password.new(digest).is_password?(token) 5 end

修正後

rails

1 def authenticated?(attribute, token) 2 digest = send("#{attribute}_digest") 3 return false if digest.nil? 4 BCrypt::Password.new(digest).is_password?(token) 5 end

投稿2020/05/04 00:01

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問