Rails教程第9.1.1章sign_in无法识别

我正在研究Michael Hartl的教程。

我刚刚将这些测试介绍给user_pages_spec.rb

 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 

我的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 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 signed_in? !current_user.nil? end def sign_out self.current_user = nil cookies.delete(:remember_token) end end 

当我运行测试时,所有4个都失败并出现以下错误消息:

 1) User pages edit page Failure/Error: sign_in user NoMethodError: undefined method `sign_in' for # # ./spec/requests/user_pages_spec.rb:90:in `block (3 levels) in ' 

我应该如何获取用户页面规范来从sessions_helper中获取sign_in函数? users_controller可以使用它; 它只是我做错了的测试文件。

我尝试明确地包含SessionsHelper并且它没有帮助。

清单9.1中的sign_in user调用的引入是最近的一个更改 ,它与RSpec在列表9.6之前不引入此方法的事实不一致。 事实certificate原始版本是正确的,并且已经删除了对sign_in user调用。