在Ruby on Rails教程上遇到了测试错误 - 错误:UsersControllerTest#test_should_redirect_update_when_logged_in_as_wrong_user:

时间:2015-04-01 04:19:09

标签: ruby-on-rails ruby railstutorial.org

我一直坚持这一段时间并且在我进行测试时仍然遇到2个错误。引用代码清单9.23测试点。任何帮助将不胜感激。

测试错误:

    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 个答案:

答案 0 :(得分: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