Ruby on rails 4 Hartl Rails教程-对未定义的方法有问题';登录&x27;测试期间
因此,我正在运行Michael Hartl Rails教程,在创建编辑页面(清单9.3的末尾)之后,我在运行测试时遇到了以下错误。据我所知,我定义了sign_-in方法并使其在我的应用程序控制器中可用。不确定我哪里出错了,因为他的教程说我的测试应该通过这一点。感谢您的帮助。(另外,如果我需要包括任何其他内容,请告诉我) 失败: 1) 用户页面编辑页面 失败/错误:登录用户 命名错误: 未定义的方法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块(
为#
#./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已经成功地教会了我解决问题的方法,谢谢。在进一步检查教程后,我注意到他确实做了类似的事情,所以我一定错过了理解课程。我很感激你的解释,因为我现在对它的理解好多了。非常感谢。