聞きたいこと
現在Ruby on Rails Tutorialの第9章を実施しているのですが、9-31のsession helperのテストの実装をチュートリアル通りに実施してもテストが正常終了しませんでした。
エラーとしては、NoMethodError: undefined method 'remember' for #<SessionsHelperTest:0x007fb0591e1bd8>
で、session helperのテストでsession helperにて定義してあるrememberメソッドを呼び出そうとしている部分でメソッドが見つけられていないようでした。
下記の実装の通り、include SessionHelper
をSessionHelperTestクラス内で実装すると問題なくテストができました。
そこで、質問ですが、、、
include SessionHelper
がチュートリアルに記載されていないのは誤植ですか?- test内でhelperをincludeするのは一般的なのでしょうか?
該当のコード
- session helperのテストコード(test/helpers/sessions_helper_test.rb)
require 'test_helper' class SessionsHelperTest < ActionView::TestCase include SessionHelper # def setup @user = users(:michael) remember(@user) end test "current_user returns right user when session is nil" do assert_equal @user, current_user assert is_logged_in? end test "current_user returns nil when remember digest is wrong" do @user.update_attribute(:remember_digest, User.digest(User.new_token)) assert_nil current_user end end
- session helper自身(app/helper/sessions_helper.rb)
module SessionsHelper def log_in(user) session[:user_id] = user.id end def remember(user) user.remember cookies.permanent.signed[:user_id] = user.id cookies.permanent[:remember_token] = user.remember_token end def current_user if (user_id = session[:user_id]) @current_user ||= User.find_by(id: user_id) elsif (user_id = cookies.signed[:user_id]) user = User.find_by(id: user_id) if user && user.authenticated?(cookies[:remember_token]) log_in user @current_user = user end end end def logged_in? !current_user.nil? end def forget(user) user.forget cookies.delete(:user_id) cookies.delete(:remember_token) end def log_out forget(current_user) session.delete(:user_id) @current_user = nil end end
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/22 14:14