Ruby on rails Rails教程第3版命名错误:未定义的方法“记住”标记';零级:零级
我在第9章Rails教程中讨论了测试问题,但在第8章中讨论了测试问题。有人能帮我解决吗 问题就在这里Ruby on rails Rails教程第3版命名错误:未定义的方法“记住”标记';零级:零级,ruby-on-rails,ruby,railstutorial.org,Ruby On Rails,Ruby,Railstutorial.org,我在第9章Rails教程中讨论了测试问题,但在第8章中讨论了测试问题。有人能帮我解决吗 问题就在这里 test“记住登录”do 以(@user,记住我:“1”)的身份登录 断言\u not \u nil cookies[“记住\u令牌”] 断言_相等cookies['memory_token'],分配(:user)。记住_token 结束 测试表明,这是一个严重的问题 NoMethodError: undefined method `remember_token' for nil:NilClas
test“记住登录”do
以(@user,记住我:“1”)的身份登录
断言\u not \u nil cookies[“记住\u令牌”]
断言_相等cookies['memory_token'],分配(:user)。记住_token
结束
测试表明,这是一个严重的问题
NoMethodError: undefined method `remember_token' for nil:NilClass
test/integration/users_login_test.rb:43:in `block in <class:UsersLoginTest>'
test/integration/users_login_test.rb:43:in `block in <class:UsersLoginTest>'
NoMethodError:nil:NilClass的未定义方法'memory_token'
test/integration/users\u login\u test.rb:43:in'block in'
test/integration/users\u login\u test.rb:43:in'block in'
我的完整用户\u登录\u测试
require 'test_helper'
class UsersLoginTest < ActionDispatch::IntegrationTest
def setup
@user = users(:michael)
end
test "login with invalid information" do #INVALID
get login_path
assert_template 'sessions/new'
post login_path, 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, 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
# Simulate a user clicking logout in a second window.
delete logout_path
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
test "login with remembering" do
log_in_as(@user, remember_me: '1')
assert_not_nil cookies['remember_token']
assert_equal cookies['remember_token'], assigns(:user).remember_token
end
test "login without remembering" do
log_in_as(@user, remember_me: '0')
assert_nil cookies['remember_token']
end
end
需要“测试助手”
类UsersLoginTest
我的用户控制器是
class UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
before_action :correct_user, only: [:edit, :update]
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
log_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
flash[:success] = "Profile updated"
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
# Before filters
# Confirms a logged-in user.
def logged_in_user
unless logged_in?
store_location
flash[:danger] = "Please log in."
redirect_to login_url
end
end
# Confirms the correct user.
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless current_user?(@user)
end
end
class UsersController
所有的测试都是绿色的,直到我添加了一些代码,然后我遇到了这个问题。我是Ruby新手,解决这个问题对我来说有点难。
向您致意,并为我的英语道歉)问题是
分配[:user]
为零<代码>登录,因为是一个测试助手,它不会调用控制器,所以分配总是空的。此外,它并不是真正测试您的控制器。您需要将其作为其余测试编写:
test "login with remembering" do
post login_path, session: { email: @user.email, password: 'password', remember_me: '1' }
assert_not_nil cookies['remember_token']
assert_equal cookies['remember_token'], assigns(:user).remember_token
end
请显示您的整个测试-
@user
变量未分配。全文我已发布。是的,我得到了这个,但不明白为什么(Ruby 4不存在。我建议选择一个更好的标题。我这样解决问题。对吗?现在测试很好Test“登录并记住”以(@user,memory\u me:'1')身份登录。断言\u not nil cookies['memory\u token']@request.cookies['memory\u token']=@user.memory_-token end
您登录时使用什么?设计?浏览器。笔记本电脑带有debian和GoogleChrome。这对测试很重要吗?或者我在@request中选择了错误的方式-u-嗯,我指的是服务器端。:)不管怎样,您编写测试的方式您正在测试您的测试助手是否正常工作,您甚至没有在那里触摸您的应用程序。rails服务器(从控制台---at localhost)可以查看评论。我会设法找到解决办法