title: Expected response to be a <2XX: success>, but was a <403: Forbidden> For Controller Test
body: <p>I'm trying to run a simple test on a Ruby on Rails 6.0 application, but I am getting a 403 error.</p>
  
  <pre><code>Alberts-MacBook-Pro:rr albertski$ rails test test/controllers/categories_controller_test.rb
  Running via Spring preloader in process 72301
  Run options: --seed 53214
  
  # Running:
  
  F
  
  Failure:
  CategoriesControllerTest#test_should_get_categories_index [/Users/albertski/Sites/rr/test/controllers/categories_controller_test.rb:10]:
  Expected response to be a &lt;2XX: success&gt;, but was a &lt;403: Forbidden&gt;
  </code></pre>
  
  <p>categories_controller.rb</p>
  
  <pre><code>class CategoriesController &lt; ApplicationController
    def index
  
    end
  
    def new
  
    end
  
    def show
  
    end
  end
  </code></pre>
  
  <p>categories_controller_test.rb</p>
  
  <pre><code>require 'test_helper'
  
  class CategoriesControllerTest &lt; ActionDispatch::IntegrationTest
    def setup
      @category = Category.create(name: "sports")
    end
  
    test "should get categories index" do
      get categories_path
      assert_response :success
    end
  
  end
  </code></pre>
  
  <p>application_controller.rb</p>
  
  <pre><code>class ApplicationController &lt; ActionController::Base
  
    helper_method :current_user, :logged_in?
  
    def current_user
      @current_user ||= User.find(session[:user_id]) if session[:user_id]
    end
  
    def logged_in?
      !!current_user
    end
  
    def require_user
      if !logged_in?
        flash[:danger] = "You must be logged in to perform this action"
        redirect_to root_path
      end
    end
  end
  </code></pre>
  
  <p>config/environments/test.rb</p>
  
  <pre><code># The test environment is used exclusively to run your application's
  # test suite. You never need to work with it otherwise. Remember that
  # your test database is "scratch space" for the test suite and is wiped
  # and recreated between test runs. Don't rely on the data there!
  
  Rails.application.routes.default_url_options[:host] = 'http://localhost:3000'
  
  Rails.application.configure do
    # Settings specified here will take precedence over those in config/application.rb.
    config.hosts &lt;&lt; "localhost:3000"
  
    config.cache_classes = false
  
    # Do not eager load code on boot. This avoids loading your whole application
    # just for the purpose of running a single test. If you are using a tool that
    # preloads Rails for running tests, you may have to set it to true.
    config.eager_load = false
  
    # Configure public file server for tests with Cache-Control for performance.
    config.public_file_server.enabled = true
    config.public_file_server.headers = {
      'Cache-Control' =&gt; "public, max-age=#{1.hour.to_i}"
    }
  
    # Show full error reports and disable caching.
    config.consider_all_requests_local       = true
    config.action_controller.perform_caching = false
    config.cache_store = :null_store
  
    # Raise exceptions instead of rendering exception templates.
    config.action_dispatch.show_exceptions = false
  
    # Disable request forgery protection in test environment.
    config.action_controller.allow_forgery_protection = false
  
    # Store uploaded files on the local file system in a temporary directory.
    config.active_storage.service = :test
  
    config.action_mailer.perform_caching = false
  
    # Tell Action Mailer not to deliver emails to the real world.
    # The :test delivery method accumulates sent emails in the
    # ActionMailer::Base.deliveries array.
    config.action_mailer.delivery_method = :test
  
    # Print deprecation notices to the stderr.
    config.active_support.deprecation = :stderr
  
    # Raises error for missing translations.
    # config.action_view.raise_on_missing_translations = true
  end
  </code></pre>
  
  <p>I did debug <code>get categories_path</code> and it returns <code>/categories</code>.  Also, when viewing the <code>/categories</code> path in a browser I don't have any issues; it only happens in the test.</p>