因此,我正在運行Michael Hartl Rails教程,並且在創建編輯頁面(代碼清單9.3末尾)後,我運行時遇到以下錯誤我的測試。據我所知,我定義了sign_in方法並使其在我的應用程序控制器中可用。不完全確定我的錯在哪裏,因爲他的教程說我的測試應該通過這一點。任何幫助表示讚賞。 (另外,請讓我知道如果我需要包括別的)Hartl Rails教程 - 在測試過程中遇到未定義的方法'sign_in'
Failures:
1) User pages edit page Failure/Error: sign_in user NoMethodError: undefined method
sign_in' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_4::Nested_1:0x00000108a92118> # ./spec/requests/user_pages_spec.rb:60:in
block (3 levels) in '2) User pages edit page Failure/Error: sign_in user NoMethodError: undefined method
sign_in' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_4::Nested_1:0x00000108820560> # ./spec/requests/user_pages_spec.rb:60:in
block (3 levels) in '3) User pages edit page Failure/Error: sign_in user NoMethodError: undefined method
sign_in' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_4::Nested_1:0x00000108846be8> # ./spec/requests/user_pages_spec.rb:60:in
block (3 levels) in '4) User pages edit with invalid information Failure/Error: sign_in user NoMethodError: undefined method
sign_in' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_4::Nested_2:0x00000103e6cd60> # ./spec/requests/user_pages_spec.rb:60:in
block (3 levels) in 'Finished in 0.98841 seconds 23 examples, 4 failures
測試文檔:user_pages_spec.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
會議助手:sessions_helper.rb
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
應用程序控制器:application_controller.rb
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
確認一下...你指的教程從這個站點(http://ruby.railstutorial.org)? –
確認。雖然理查德約翰遜已經成功地教育了我的解決方案。 – dhummel