Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 4 Hartl Rails教程-对未定义的方法有问题';登录&x27;测试期间_Ruby On Rails 4_Railstutorial.org - Fatal编程技术网

Ruby on rails 4 Hartl Rails教程-对未定义的方法有问题';登录&x27;测试期间

Ruby on rails 4 Hartl Rails教程-对未定义的方法有问题';登录&x27;测试期间,ruby-on-rails-4,railstutorial.org,Ruby On Rails 4,Railstutorial.org,因此,我正在运行Michael Hartl Rails教程,在创建编辑页面(清单9.3的末尾)之后,我在运行测试时遇到了以下错误。据我所知,我定义了sign_-in方法并使其在我的应用程序控制器中可用。不确定我哪里出错了,因为他的教程说我的测试应该通过这一点。感谢您的帮助。(另外,如果我需要包括任何其他内容,请告诉我) 失败: 1) 用户页面编辑页面 失败/错误:登录用户 命名错误: 未定义的方法为# #./spec/requests/user\u pages\u spec.rb:60:in块(

因此,我正在运行Michael Hartl Rails教程,在创建编辑页面(清单9.3的末尾)之后,我在运行测试时遇到了以下错误。据我所知,我定义了sign_-in方法并使其在我的应用程序控制器中可用。不确定我哪里出错了,因为他的教程说我的测试应该通过这一点。感谢您的帮助。(另外,如果我需要包括任何其他内容,请告诉我)

失败:

1) 用户页面编辑页面 失败/错误:登录用户 命名错误: 未定义的方法
为#
#./spec/requests/user\u pages\u spec.rb:60:in
块(3级)in'

2) 用户页面编辑页面 失败/错误:登录用户 命名错误: 未定义的方法
为#
#./spec/requests/user\u pages\u spec.rb:60:in
块(3级)in'

3) 用户页面编辑页面 失败/错误:登录用户 命名错误: 未定义的方法
为#
#./spec/requests/user\u pages\u spec.rb:60:in
块(3级)in'

4) 使用无效信息编辑用户页面 失败/错误:登录用户 命名错误: 未定义的方法
为#
#./spec/requests/user\u pages\u spec.rb:60:in
块(3级)in'

以0.98841秒完成 23例,4例失败

测试文档:用户页面\u规范rb

require 'spec_helper'

    describe "User pages" do

    subject { page }
    .
    .
    .

    describe "edit" do
        let(:user) { FactoryGirl.create(:user) }
        before do
            sign_in user
            visit edit_user_path(user)
        end

        describe "page" do
            it { should have_content("Update your profile") }
            it { should have_title("Edit user") }
            it { should have_link('change', href: 'http://gravatar.com/emails') }
        end

        describe "with invalid information" do
            before { click_button "Save changes" }

            it { should have_content('error') }
        end
    end
end
module SessionsHelper

    def sign_in(user)
        remember_token = User.new_remember_token
        cookies.permanent[:remember_token] = remember_token
        user.update_attribute(:remember_token, User.encrypt(remember_token))
        self.current_user = user
    end

    def signed_in?
        !current_user.nil?
    end

    def current_user=(user)
        @current_user = user
    end

    def current_user
        remember_token = User.encrypt(cookies[:remember_token])
        @current_user ||= User.find_by(remember_token: remember_token)
    end

    def sign_out
        current_user.update_attribute(:remember_token,
                                      User.encrypt(User.new_remember_token))
        cookies.delete(:remember_token)
        self.current_user = nil
    end
end
class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  include SessionsHelper
end
会话助手:会话\u Helper.rb

require 'spec_helper'

    describe "User pages" do

    subject { page }
    .
    .
    .

    describe "edit" do
        let(:user) { FactoryGirl.create(:user) }
        before do
            sign_in user
            visit edit_user_path(user)
        end

        describe "page" do
            it { should have_content("Update your profile") }
            it { should have_title("Edit user") }
            it { should have_link('change', href: 'http://gravatar.com/emails') }
        end

        describe "with invalid information" do
            before { click_button "Save changes" }

            it { should have_content('error') }
        end
    end
end
module SessionsHelper

    def sign_in(user)
        remember_token = User.new_remember_token
        cookies.permanent[:remember_token] = remember_token
        user.update_attribute(:remember_token, User.encrypt(remember_token))
        self.current_user = user
    end

    def signed_in?
        !current_user.nil?
    end

    def current_user=(user)
        @current_user = user
    end

    def current_user
        remember_token = User.encrypt(cookies[:remember_token])
        @current_user ||= User.find_by(remember_token: remember_token)
    end

    def sign_out
        current_user.update_attribute(:remember_token,
                                      User.encrypt(User.new_remember_token))
        cookies.delete(:remember_token)
        self.current_user = nil
    end
end
class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  include SessionsHelper
end
应用程序控制器:应用程序控制器.rb

require 'spec_helper'

    describe "User pages" do

    subject { page }
    .
    .
    .

    describe "edit" do
        let(:user) { FactoryGirl.create(:user) }
        before do
            sign_in user
            visit edit_user_path(user)
        end

        describe "page" do
            it { should have_content("Update your profile") }
            it { should have_title("Edit user") }
            it { should have_link('change', href: 'http://gravatar.com/emails') }
        end

        describe "with invalid information" do
            before { click_button "Save changes" }

            it { should have_content('error') }
        end
    end
end
module SessionsHelper

    def sign_in(user)
        remember_token = User.new_remember_token
        cookies.permanent[:remember_token] = remember_token
        user.update_attribute(:remember_token, User.encrypt(remember_token))
        self.current_user = user
    end

    def signed_in?
        !current_user.nil?
    end

    def current_user=(user)
        @current_user = user
    end

    def current_user
        remember_token = User.encrypt(cookies[:remember_token])
        @current_user ||= User.find_by(remember_token: remember_token)
    end

    def sign_out
        current_user.update_attribute(:remember_token,
                                      User.encrypt(User.new_remember_token))
        cookies.delete(:remember_token)
        self.current_user = nil
    end
end
class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  include SessionsHelper
end
class ApplicationController
这告诉您sign\u in不是测试范围内的方法,因此您不能在before块中使用它。这是一种控制方法,而不是测试方法

最简单的方法是创建一个进行登录的spec helper方法,您可以在before块的上下文中调用该方法,该块为任何需要登录用户的测试设置状态

一种方法是我有一个“用户登录”助手,它使用水豚来访问登录路径,用正确的细节填写登录表单,然后遵循重定向

相关问题:


我只是想确认一下。。。您正在参考本网站的教程()?已确认。虽然Richard Johnson已经成功地教会了我解决问题的方法,谢谢。在进一步检查教程后,我注意到他确实做了类似的事情,所以我一定错过了理解课程。我很感激你的解释,因为我现在对它的理解好多了。非常感谢。