0

I've been stuck on this one for a while and keep getting 2 errors when I rake test. Referencing Listing 9.23 testing point. Any help would be much appreciated.

Test Error:

    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 file:

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 Answer 1

1

And where does user_id come from here?

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

Seems it should be:

session[:user_id] = user.id
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.