Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails教程第3版命名错误:未定义的方法“记住”标记';零级:零级_Ruby On Rails_Ruby_Railstutorial.org - Fatal编程技术网

Ruby on rails Rails教程第3版命名错误:未定义的方法“记住”标记';零级:零级

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

我在第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: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)可以查看评论。我会设法找到解决办法