Han*_*nna 0 ruby-on-rails nomethoderror railstutorial.org
我正在研究迈克尔哈特尔的导轨教程(第9章).
我收到此错误:
Error:
UsersLoginTest#test_login_with_remembering:
NoMethodError: undefined method `FILL_IN' for nil:NilClass
test/integration/users_login_test.rb:42:in `block in <class:UsersLoginTest>'
Run Code Online (Sandbox Code Playgroud)
FILL-IN在第8章中添加了,直到第9章才有任何问题.我尝试了很多,但我无法修复它.这是我的UsersLoginTest类.
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, 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_equal assigns(:user).FILL_IN, FILL_IN
end
test "login without remembering" do
log_in_as(@user, remember_me: '0')
assert_nil cookies['remember_token']
end
end
Run Code Online (Sandbox Code Playgroud)
第42行是:
assert_equal assigns(:user).FILL_IN,FILL_IN
Run Code Online (Sandbox Code Playgroud)
小智 8
如果您在清单8.62中执行了"使用记忆练习登录",则需要在清单9.29中使用@user实例变量.我花了一段时间才意识到这一点,所以它可能有助于其他初学者看到Shadwell的建议在代码中的样子:
sessions_controller.rb
class SessionsController < ApplicationController
# ...
def create
@user = User.find_by(email: params[:session][:email].downcase)
if @user && @user.authenticate(params[:session][:password])
log_in @user
params[:session][:remember_me] == '1' ? remember(@user) : forget(@user)
redirect_back_or @user
else
flash.now[:danger] = 'Invalid email/password combination' # Flash.now designed for rendered pages, disappears at the next request.
render 'new'
end
end
# ...
end
Run Code Online (Sandbox Code Playgroud)
users_login_test.rb
# ...
test "login with remembering" do
log_in_as(@user, remember_me: '1')
assert_equal assigns(:user).remember_token, cookies['remember_token']
end
# ...
Run Code Online (Sandbox Code Playgroud)
公平地说,Michael Hartl建议我们用git解决单独主题分支中的练习.
| 归档时间: |
|
| 查看次数: |
1873 次 |
| 最近记录: |