user7288350
user7288350

Reputation: 21

NoMethodError error in Rails

I'm going through Michael Hartl's Ruby tutorial and have been stuck for a day on a failing test

I get this when I run:

Error:
UsersControllerTest#test_should_redirect_edit_when_logged_in_as_wrong_user:
NoMethodError: undefined method `session' for nil:NilClass
test/test_helper.rb:19:in `log_in_as'
test/controllers/users_controller_test.rb:37:in `block in <class:UsersControllerTest>'

Here is the calling code:

require 'test_helper'

class UsersControllerTest < ActionDispatch::IntegrationTest

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

test "should redirect update when logged in as wrong user" do
    log_in_as(@other_user)
    patch user_path(@user), params: { user: { name: @user.name,
                                              email: @user.email } }
    assert flash.empty?
    assert_redirected_to root_url
  end


*And here is the method I'm trying to call from the **test_helper** class:*

# Log in as a particular user
  def log_in_as(user)
    session[:user_id] = user.id
  end

Upvotes: 1

Views: 233

Answers (2)

user7288350
user7288350

Reputation: 21

I was missing a part in my test_helper.rb class:

class ActionDispatch::IntegrationTest

  # Log in as a particular user.
  def log_in_as(user, password: 'password', remember_me: '1')
    post login_path, params: { session: { email: user.email,
                                          password: password,
                                          remember_me: remember_me } }
  end
end

Thank you for taking a look!

Upvotes: 1

Blackcoat77
Blackcoat77

Reputation: 1625

Did you include this line of code: include SessionsHelper in your application_controller.rb?

You have typo in setup method from the code above: @otheruser = users(:archer) should be @other_user = users(:archer)

Check again the code from the test file: test / controllers / users_controller_test.rb

especially this part of the code:

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

Hope it helps!

Upvotes: 0

Related Questions