From 1ecbe23b84bbfdcfc60ec59572327e72d00ee673 Mon Sep 17 00:00:00 2001 From: Maarten Claes Date: Wed, 14 Dec 2022 13:10:57 +0100 Subject: [PATCH] Use RSpec's when_first_matching_example_defined if available This RSpec method was added in v3.5.0 to with expensive setup logic. It results in similar behavior as just using `before(:example, ...)`, but it will only run once instead of for each example. --- CHANGELOG.md | 2 ++ lib/react_on_rails/test_helper.rb | 11 ++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e8f415ba..581638299 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,8 @@ Changes since last non-beta release. ### Added - Exposed `reactHydrateOrRender` utility via [PR 1481](https://github.com/shakacode/react_on_rails/pull/1481) +- Optimized `ReactOnRails::TestHelper`'s RSpec integration using + `when_first_matching_example_defined` via [PR 1496](https://github.com/shakacode/react_on_rails/pull/1496) ### [13.1.0] - 2022-08-20 diff --git a/lib/react_on_rails/test_helper.rb b/lib/react_on_rails/test_helper.rb index 99ebfca57..055363375 100644 --- a/lib/react_on_rails/test_helper.rb +++ b/lib/react_on_rails/test_helper.rb @@ -35,8 +35,17 @@ module TestHelper def self.configure_rspec_to_compile_assets(config, *metatags) metatags = %i[js server_rendering controller] if metatags.empty? + # Supported since RSpec 3.5.0 + supports_first_matching_example = config.respond_to?(:when_first_matching_example_defined) + metatags.each do |metatag| - config.before(:example, metatag) { ReactOnRails::TestHelper.ensure_assets_compiled } + if supports_first_matching_example + config.when_first_matching_example_defined(metatag) do + ReactOnRails::TestHelper.ensure_assets_compiled + end + else + config.before(:example, metatag) { ReactOnRails::TestHelper.ensure_assets_compiled } + end end end