2015-04-01 53 views
0

我一直堅持這一段時間,並繼續收到2錯誤,當我耙測試。引用代碼清單9.23測試點。任何幫助將非常感激。一直在Ruby on Rails上的測試錯誤教程 - 錯誤:UsersControllerTest#test_should_redirect_update_when_logged_in_as_wrong_user:

測試錯誤:

1) Error: 
UsersControllerTest#test_should_redirect_update_when_logged_in_as_wrong_user: 
NameError: undefined local variable or method `user_id' for #<UsersControllerTest:0x007fbff6be3120> 
    test/test_helper.rb:24:in `log_in_as' 
    test/controllers/users_controller_test.rb:35:in `block in <class:UsersControllerTest>' 


    2) Error: 
UsersControllerTest#test_should_redirect_edit_when_logged_in_as_wrong_user: 
NameError: undefined local variable or method `user_id' for #<UsersControllerTest:0x007fbff6c01850> 
    test/test_helper.rb:24:in `log_in_as' 
    test/controllers/users_controller_test.rb:28:in `block in <class:UsersControllerTest>' 

29 runs, 66 assertions, 0 failures, 2 errors, 0 skips 

User_Controller_Test文件:

require 'test_helper' 

class UsersControllerTest < ActionController::TestCase 

    def setup 
    @user = users(:michael) 
    @other_user = users(:archer) 
    end 

    test "should get new" do 
    get :new 
    assert_response :success 
    end 

    test "should redirect edit when not logged in" do 
    get :edit, id: @user 
    assert_not flash.empty? 
    assert_redirected_to login_url 
    end 

    test "should redirect update when not logged in" do 
    patch :update, id: @user, user: { name: @user.name, email: @user.email } 
    assert_not flash.empty? 
    assert_redirected_to login_url 
    end 

test "should redirect edit when logged in as wrong user" do 
    log_in_as(@other_user) 
    get :edit, id: @user 
    assert flash.empty? 
    assert_redirected_to root_url 
    end 

test_helper.rb中:

ENV['RAILS_ENV'] ||= 'test' 
require File.expand_path('../../config/environment', __FILE__) 
require 'rails/test_help' 

class ActiveSupport::TestCase 
    # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order. 
    fixtures :all 

def is_logged_in? 
    !session[:user_id].nil? 
end 

#logs in a test user 
def log_in_as(user, options = {}) 
    password = options[:password]  || 'password' 
    remember_me = options[:remember_me] || '1' 
    if integration_test? 
     post login_path, session: { email: user.email, 
            password: password, 
            remember_me: remember_me} 

else 

session[:user_id] = user_id 
end 
end 

private 
#returns true inside an int. test 
def integration_test? 
    defined?(post_via_redirect) 
    end 
end 

回答

1

而且哪裏的user_id從這裏來?

def log_in_as(user, options = {}) 
    ... 
    if integration_test? 
    ... 
    else 
    session[:user_id] = user_id 
    end 
end 

似乎應該是:

session[:user_id] = user.id