私はMichael Hartl's Railsチュートリアルを行っていますが、高度なログを実装するとテストに就きました(9.12節)。Michael Hartl's Railsチュートリアル9章(9.12節)のテストで "未定義のローカル変数またはメソッド"が失敗しました
これまでのところすべてのテストに合格しましたが、有効な情報でログインをテストするとエラーが発生します。どういうわけか、何かが明確に定義されていないか、見当たりません。 助けてください?おかげ
UserLoginTest
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" do
get login_path
post login_path, params: { session: { email: @user.email, password: 'password' } }
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)
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
follow_redirect!
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
SessionsHelper
module SessionsHelper
def log_in(user)
session[:user_id] = user.id
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 remember(user)
user.remember
cookies.permanent.signed[user_id] = user.id
cookies.permanent[:remember_token] = user.remember_token
end
def logged_in?
!current_user.nil?
end
def forget
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
エンド SessionsController
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
remember 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
この投稿にテスト出力を追加するとよいでしょう。一般的に質問はStackOverflowに自己完結型でなければなりません。また、出力のスタックトレースをチェックアウトしてください!たとえば、 'SessionsHelper'の18行目を見てください。 – JKillian