Skip to content

The system test scaffold generator is failing when a rails project lacks system tests #559

Open
@rschultheis

Description

@rschultheis

Using versions: tailwindcss-rails 4.1.8 and rails 8.0.2.

Rails projects created with the --skip-system-test --css=tailwind combination of arguments get an exception when using the rails scaffold generator due to some code in this project.

To reproduce:

rails new --skip-system-test --css=tailwind bugdemo
cd bugdemo
rails generate scaffold demobug

That results in this stack trace:

rails generate scaffold demobug
      invoke  active_record
      create    db/migrate/20250701122835_create_demobugs.rb
      create    app/models/demobug.rb
      invoke    test_unit
      create      test/models/demobug_test.rb
      create      test/fixtures/demobugs.yml
      invoke  resource_route
       route    resources :demobugs
      invoke  scaffold_controller
      create    app/controllers/demobugs_controller.rb
      invoke    tailwindcss
      create      app/views/demobugs
      create      app/views/demobugs/index.html.erb
      create      app/views/demobugs/edit.html.erb
      create      app/views/demobugs/show.html.erb
      create      app/views/demobugs/new.html.erb
      create      app/views/demobugs/_form.html.erb
      create      app/views/demobugs/_demobug.html.erb
      invoke    resource_route
      invoke    test_unit
      create      test/controllers/demobugs_controller_test.rb
        gsub      test/system/demobugs_test.rb
/Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/actions/file_manipulation.rb:271:in 'IO.binread': No such file or directory @ rb_sysopen - /Users/rob/workspace/bugdemo/test/system/demobugs_test.rb (Errno::ENOENT)
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/actions/file_manipulation.rb:271:in 'Thor::Actions#gsub_file'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/tailwindcss-rails-4.2.3/lib/generators/test_unit/scaffold/scaffold_generator.rb:8:in 'TestUnit::Generators::ScaffoldGenerator#fix_system_test'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/command.rb:28:in 'Thor::Command#run'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:127:in 'Thor::Invocation#invoke_command'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:134:in 'block in Thor::Invocation#invoke_all'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:134:in 'Hash#each'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:134:in 'Enumerable#map'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:134:in 'Thor::Invocation#invoke_all'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/group.rb:243:in 'Thor::Group.dispatch'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:116:in 'Thor::Invocation#invoke'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/group.rb:288:in 'block in Thor::Group#_invoke_for_class_method'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/shell.rb:68:in 'Thor::Shell#with_padding'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/group.rb:277:in 'Thor::Group#_invoke_for_class_method'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/group.rb:134:in 'Rails::Generators::ScaffoldControllerGenerator#_invoke_from_option_test_framework'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/command.rb:28:in 'Thor::Command#run'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:127:in 'Thor::Invocation#invoke_command'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:134:in 'block in Thor::Invocation#invoke_all'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:134:in 'Hash#each'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:134:in 'Enumerable#map'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:134:in 'Thor::Invocation#invoke_all'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/group.rb:243:in 'Thor::Group.dispatch'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:116:in 'Thor::Invocation#invoke'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/group.rb:288:in 'block in Thor::Group#_invoke_for_class_method'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/shell.rb:68:in 'Thor::Shell#with_padding'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/group.rb:277:in 'Thor::Group#_invoke_for_class_method'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/group.rb:134:in 'Rails::Generators::ScaffoldGenerator#_invoke_from_option_scaffold_controller'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/command.rb:28:in 'Thor::Command#run'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:127:in 'Thor::Invocation#invoke_command'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:134:in 'block in Thor::Invocation#invoke_all'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:134:in 'Hash#each'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:134:in 'Enumerable#map'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:134:in 'Thor::Invocation#invoke_all'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/group.rb:243:in 'Thor::Group.dispatch'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/base.rb:584:in 'Thor::Base::ClassMethods#start'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/railties-8.0.2/lib/rails/generators.rb:265:in 'Rails::Generators.invoke'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/railties-8.0.2/lib/rails/commands/generate/generate_command.rb:26:in 'Rails::Command::GenerateCommand#perform'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/command.rb:28:in 'Thor::Command#run'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor/invocation.rb:127:in 'Thor::Invocation#invoke_command'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/railties-8.0.2/lib/rails/command/base.rb:178:in 'Rails::Command::Base#invoke_command'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/thor-1.3.2/lib/thor.rb:538:in 'Thor.dispatch'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/railties-8.0.2/lib/rails/command/base.rb:73:in 'Rails::Command::Base.perform'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/railties-8.0.2/lib/rails/command.rb:65:in 'block in Rails::Command.invoke'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/railties-8.0.2/lib/rails/command.rb:143:in 'Rails::Command.with_argv'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/railties-8.0.2/lib/rails/command.rb:63:in 'Rails::Command.invoke'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/railties-8.0.2/lib/rails/commands.rb:18:in '<main>'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/3.4.0/bundled_gems.rb:82:in 'Kernel.require'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/3.4.0/bundled_gems.rb:82:in 'block (2 levels) in Kernel#replace_require'
	from /Users/rob/.rbenv/versions/3.4.4/lib/ruby/gems/3.4.0/gems/bootsnap-1.18.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in 'Kernel#require'
	from bin/rails:4:in '<main>'

The issue seems to be this bit of code assuming a system test file exists:

gsub_file File.join("test/system", class_path, "#{file_name.pluralize}_test.rb"),

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions