Skip to content

Commit

Permalink
Improve Engine's RSpec auto-integration
Browse files Browse the repository at this point in the history
Nest test framework integration code within [initializer][] blocks. From
within those blocks, access the configuration through the
[Rails::Application#config][] attribute.

For `RSpec`, it's possible for the `RSpec` constant to exist prior to
the `RSpec.configure` module method. Drawing from prior art (like
[capybara's integration with RSpec][capybara/rspec], requiring
`rspec/core` appears to be a predictable way to guarantee the definition
of `RSpec.configure`. When `rspec/core` is already loaded, the `require`
statement will be a no-op.

[initializer]: https://api.rubyonrails.org/classes/Rails/Application.html#method-i-initializer
[Rails::Application#config]: https://edgeapi.rubyonrails.org/classes/Rails/Application.html
[capybara/rspec]: https://github.com/teamcapybara/capybara/blob/6267ff65a294a7dcbe9d7281c30cc2d91b08b093/lib/capybara/rspec.rb#L3
  • Loading branch information
seanpdoyle committed Dec 1, 2023
1 parent 05121b4 commit 0ee6922
Showing 1 changed file with 20 additions and 14 deletions.
34 changes: 20 additions & 14 deletions lib/capybara_accessibility_audit/engine.rb
Expand Up @@ -10,27 +10,33 @@ class Engine < ::Rails::Engine
]
config.capybara_accessibility_audit.audit_enabled = true

ActiveSupport.on_load :action_dispatch_system_test_case do
include CapybaraAccessibilityAudit::AuditSystemTestExtensions
initializer "capybara_accessibility_audit.minitest" do |app|
ActiveSupport.on_load :action_dispatch_system_test_case do
include CapybaraAccessibilityAudit::AuditSystemTestExtensions

self.accessibility_audit_enabled = Rails.configuration.capybara_accessibility_audit.audit_enabled
self.accessibility_audit_enabled = app.config.capybara_accessibility_audit.audit_enabled

accessibility_audit_after Rails.configuration.capybara_accessibility_audit.audit_after
accessibility_audit_after app.config.capybara_accessibility_audit.audit_after
end
end

if defined?(RSpec)
RSpec.configure do |config|
config.include CapybaraAccessibilityAudit::AuditSystemTestExtensions, type: :system
config.include CapybaraAccessibilityAudit::AuditSystemTestExtensions, type: :feature
initializer "capybara_accessibility_audit.rspec" do |app|
if defined?(RSpec)
require "rspec/core"

configure = proc do
self.accessibility_audit_enabled = Rails.configuration.capybara_accessibility_audit.audit_enabled
RSpec.configure do |config|
config.include CapybaraAccessibilityAudit::AuditSystemTestExtensions, type: :system
config.include CapybaraAccessibilityAudit::AuditSystemTestExtensions, type: :feature

accessibility_audit_after Rails.configuration.capybara_accessibility_audit.audit_after
end
configure = proc do
self.accessibility_audit_enabled = app.config.capybara_accessibility_audit.audit_enabled

config.before(type: :system, &configure)
config.before(type: :feature, &configure)
accessibility_audit_after app.config.capybara_accessibility_audit.audit_after
end

config.before(type: :system, &configure)
config.before(type: :feature, &configure)
end
end
end
end
Expand Down

0 comments on commit 0ee6922

Please sign in to comment.