Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rails 8: test helpers do not work #5705

Open
jeromedalbert opened this issue Aug 10, 2024 · 1 comment · May be fixed by #5695
Open

Rails 8: test helpers do not work #5705

jeromedalbert opened this issue Aug 10, 2024 · 1 comment · May be fixed by #5695

Comments

@jeromedalbert
Copy link
Contributor

jeromedalbert commented Aug 10, 2024

Environment

  • Ruby 3.3.2
  • Rails main (8.0.0.alpha)
  • Devise 4.9.4

Steps to reproduce

Run the following bash commands (tested on macOS):

rails new myapp --main
cd myapp
bundle add devise
rails generate devise:install
rails generate devise User
rm test/fixtures/users.yml
rails db:migrate

sed -i '' 's/end$/  root "hello#index"\nend/' config/routes.rb

echo 'class HelloController < ApplicationController
  def index
    authenticate_user!
    render plain: "Hello"
  end
end' > app/controllers/hello_controller.rb

echo 'require "test_helper"
class HelloControllerTest < ActionDispatch::IntegrationTest
  include Devise::Test::IntegrationHelpers
  def test_index
    sign_in User.new
    get "/"
    assert_response :success
  end
end' > test/integration/hello_controller_test.rb

BACKTRACE=1 rails test test/integration/hello_controller_test.rb

Current behavior

I get the following error:

Error:
HelloControllerTest#test_index:
RuntimeError: Could not find a valid mapping for #<User id: nil, email: [FILTERED], created_at: nil, updated_at: nil>
    devise (4.9.4) lib/devise/mapping.rb:46:in `find_scope!'
    devise (4.9.4) lib/devise/test/integration_helpers.rb:38:in `sign_in'
    test/integration/hello_controller_test.rb:5:in `test_index'
    minitest (5.24.1) lib/minitest/test.rb:95:in `block (3 levels) in run'
    minitest (5.24.1) lib/minitest/test.rb:192:in `capture_exceptions'
    minitest (5.24.1) lib/minitest/test.rb:90:in `block (2 levels) in run'
    minitest (5.24.1) lib/minitest.rb:368:in `time_it'
    minitest (5.24.1) lib/minitest/test.rb:89:in `block in run'
    minitest (5.24.1) lib/minitest.rb:467:in `on_signal'
    minitest (5.24.1) lib/minitest/test.rb:240:in `with_info_handler'
    minitest (5.24.1) lib/minitest/test.rb:88:in `run'
    rails (e13b251ae078) activesupport/lib/active_support/executor/test_helper.rb:5:in `block in run'
    rails (e13b251ae078) activesupport/lib/active_support/execution_wrapper.rb:104:in `perform'
    rails (e13b251ae078) activesupport/lib/active_support/executor/test_helper.rb:5:in `run'
    minitest (5.24.1) lib/minitest.rb:1200:in `run_one_method'
    minitest (5.24.1) lib/minitest.rb:433:in `run_one_method'
    minitest (5.24.1) lib/minitest.rb:420:in `block (2 levels) in run'
    minitest (5.24.1) lib/minitest.rb:419:in `each'
    minitest (5.24.1) lib/minitest.rb:419:in `block in run'
    minitest (5.24.1) lib/minitest.rb:467:in `on_signal'
    minitest (5.24.1) lib/minitest.rb:454:in `with_info_handler'
    minitest (5.24.1) lib/minitest.rb:418:in `run'
    rails (e13b251ae078) railties/lib/rails/test_unit/line_filtering.rb:10:in `run'
    minitest (5.24.1) lib/minitest.rb:332:in `block in __run'
    minitest (5.24.1) lib/minitest.rb:332:in `map'
    minitest (5.24.1) lib/minitest.rb:332:in `__run'
    minitest (5.24.1) lib/minitest.rb:288:in `run'
    minitest (5.24.1) lib/minitest.rb:86:in `block in autorun'

Expected behavior

Test should pass:

.

Finished in 0.106683s, 9.3736 runs/s, 9.3736 assertions/s.
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips

Additional information

  • This issue happened after a new attempt at deferred route drawing got merged. It is a similar problem as #5694 (see that issue for more details) except that the repro steps are different: here I wasn't able to come up with a failing single file repro script, so instead I laid out steps for a full-blown repro app.
  • A workaround is to use Rails.application.reload_routes_unless_loaded before the sign_in call.
@jeromedalbert jeromedalbert changed the title Test helpers do not work on the Rails main branch (8 alpha) Rails 8: test helpers do not work Aug 18, 2024
@bugloper
Copy link

bugloper commented Sep 5, 2024

Mine worked after adding
devise_for :users in the route file.
Note: Mine was graphql application so, I did not have this added initially.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging a pull request may close this issue.

2 participants