# Testing signals — rails/rails

> Canonical page: https://codevetter.com/unpack/rails/testing-signals

# Testing signals — rails/rails

Scanned commit be63fd9b4449505b90038acb9d51c88c02694e7e (2026-09-21). Generated by codevetter codevetter 1.12.0 on 2026-09-22.

The framework tests itself with Minitest, one test/ tree per component, and a shared runner in tools/test.rb. Active Record and Active Job are matrixed by adapter at the Rake layer. Browser-level coverage uses Capybara and Selenium and is declared for the framework tests, not for a sample app. GitHub Actions in this repo does not run that matrix; release docs point at Buildkite. JavaScript for Action Cable is a separate QUnit suite.
- The root Gemfile pins minitest ~> 6.0, minitest-mock, and, in the :test group, minitest-retry, plus stackprof and debug on MRI. capybara >= 3.39 and selenium-webdriver >= 4.20.0 are top-level dependencies used by system tests. brakeman and bundler-audit are test dependencies because generated apps include them. — [Gemfile#L6-L14](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/Gemfile#L6-L14) [Gemfile#L134-L145](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/Gemfile#L134-L145)
- tools/test.rb expects COMPONENT_ROOT, prepends that component's test directory, requires bundler/setup and rails/test_unit/runner, extends ActiveSupport::TestCase with Rails::LineFiltering, and calls Rails::TestUnit::Runner.parse_options then Runner.run. Each component's bin/test is the documented entry; the repo-root bin/test only chdirs into the first path segment and execs that component's bin/test. — [tools/test.rb#L1-L18](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/tools/test.rb#L1-L18) [bin/test#L1-L16](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/bin/test#L1-L16)
- Rails::TestUnit::Runner knows test folders models, helpers, channels, controllers, mailers, integration, jobs, and mailboxes, and parses --environment / -e itself before Minitest sees ARGV. AGENTS.md documents bin/test FILE, bin/test -i /name/, and bin/test FILE:line, and states the runner is parallel across processes. — [railties/lib/rails/test_unit/runner.rb#L25-L40](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/railties/lib/rails/test_unit/runner.rb#L25-L40) [AGENTS.md](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/AGENTS.md)
- Root rake test runs every framework in Releaser::FRAMEWORKS. rake activerecord:<adapter>:test and :integration cover mysql2, trilogy, postgresql, sqlite3, and sqlite3_mem. rake activejob:<adapter>:test and :integration cover async, inline, queue_classic (omitted on JRuby), resque, sneakers, backburner, and test. — [Rakefile#L13-L80](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/Rakefile#L13-L80) [tools/releaser/lib/releaser.rb#L8-L22](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/tools/releaser/lib/releaser.rb#L8-L22)
- Action Cable's package.json pretest/test scripts sit on @web/test-runner and qunit, with mock-socket. The package also has a lint script via eslint. actioncable/test/javascript holds the JS tests; Ruby tests live under actioncable/test/channel, connection, server, and subscription_adapter. — [actioncable/package.json#L26-L40](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/actioncable/package.json#L26-L40)
- guides/ has its own Rakefile, rails_guides.rb, and guides/test. CONTRIBUTING.md points bug reporters at executable templates in guides/bug_report_templates rather than at the main suite. — [CONTRIBUTING.md#L17-L26](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/CONTRIBUTING.md#L17-L26) [guides/source/getting_started.md#L1](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/guides/source/getting_started.md#L1)
- rails-new-docker.yml, on push and pull_request, runs railties/exe/rails new dev/devrails --dev with BUNDLE_WITHOUT=db:job:cable:storage, builds that app's Dockerfile with podman, runs it with SECRET_KEY_BASE_DUMMY=1 and DATABASE_URL=sqlite3:storage/production.sqlite3, then executes .github/workflows/scripts/test-container.rb. — [.github/workflows/rails-new-docker.yml#L1-L43](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/.github/workflows/rails-new-docker.yml#L1-L43)
- rail_inspector.yml runs only when tools/rail_inspector changes, and its job is cd tools/rail_inspector && bundle exec rake. release.yml runs only on a published GitHub release and does not run the test suite before rake push. — [.github/workflows/rail_inspector.yml#L1-L26](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/.github/workflows/rail_inspector.yml#L1-L26) [.github/workflows/release.yml#L3-L38](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/.github/workflows/release.yml#L3-L38)
- AGENTS.md requires configuration tests to use Object#with (for example ActionView::Base.with or ActionController::Base.with) after requiring active_support/core_ext/object/with, instead of manual save/restore of class attributes. — [AGENTS.md](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/AGENTS.md)
- There is no in-repo workflow that invokes rake test or the Active Record adapter matrix. A green GitHub Actions run on a normal pull request therefore does not mean the component suites passed; RELEASING_RAILS.md treats Buildkite as that signal. (inferred) — [.github/workflows/rails-new-docker.yml](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/.github/workflows/rails-new-docker.yml) [ .github/workflows/release.yml](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/%20.github/workflows/release.yml) [RELEASING_RAILS.md#L12-L18](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/RELEASING_RAILS.md#L12-L18)
- Optional queue backends are require: false in the :job group (resque, resque-scheduler, queue_classic, sneakers, backburner). Adapter tests for those gems cannot run unless the group is installed, so a default bundle that excludes :job does not exercise them. — [Gemfile#L96-L102](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/Gemfile#L96-L102) [Rakefile#L32-L56](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/Rakefile#L32-L56)
- HealthController is documented as not reflecting database or Redis health, and its own tests, if any, cannot prove dependency checks that the action does not perform. The controller rescues Exception and only renders up or down. — [railties/lib/rails/health_controller.rb#L28-L56](https://github.com/rails/rails/blob/be63fd9b4449505b90038acb9d51c88c02694e7e/railties/lib/rails/health_controller.rb#L28-L56)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
