Skip to content
This repository was archived by the owner on Nov 30, 2024. It is now read-only.

Commit 1537424

Browse files
committed
Avoid trying to apply :suite hooks to already defined example groups.
This is a fix to #2189.
1 parent 66d4d2c commit 1537424

File tree

2 files changed

+34
-12
lines changed

2 files changed

+34
-12
lines changed

lib/rspec/core/configuration.rb

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1570,11 +1570,12 @@ def apply_derived_metadata_to(metadata)
15701570
# @see #after
15711571
# @see #append_after
15721572
def before(scope=nil, *meta, &block)
1573-
on_existing_matching_groups({}) { |g| g.before(scope, *meta, &block) }
1574-
15751573
handle_suite_hook(scope, meta) do
15761574
@before_suite_hooks << Hooks::BeforeHook.new(block, {})
1577-
end || super(scope, *meta, &block)
1575+
end || begin
1576+
on_existing_matching_groups({}) { |g| g.before(scope, *meta, &block) }
1577+
super(scope, *meta, &block)
1578+
end
15781579
end
15791580
alias_method :append_before, :before
15801581

@@ -1592,11 +1593,12 @@ def before(scope=nil, *meta, &block)
15921593
# @see #after
15931594
# @see #append_after
15941595
def prepend_before(scope=nil, *meta, &block)
1595-
on_existing_matching_groups({}) { |g| g.prepend_before(scope, *meta, &block) }
1596-
15971596
handle_suite_hook(scope, meta) do
15981597
@before_suite_hooks.unshift Hooks::BeforeHook.new(block, {})
1599-
end || super(scope, *meta, &block)
1598+
end || begin
1599+
on_existing_matching_groups({}) { |g| g.prepend_before(scope, *meta, &block) }
1600+
super(scope, *meta, &block)
1601+
end
16001602
end
16011603

16021604
# Defines a `after` hook. See {Hooks#after} for full docs.
@@ -1609,11 +1611,12 @@ def prepend_before(scope=nil, *meta, &block)
16091611
# @see #before
16101612
# @see #prepend_before
16111613
def after(scope=nil, *meta, &block)
1612-
on_existing_matching_groups({}) { |g| g.after(scope, *meta, &block) }
1613-
16141614
handle_suite_hook(scope, meta) do
16151615
@after_suite_hooks.unshift Hooks::AfterHook.new(block, {})
1616-
end || super(scope, *meta, &block)
1616+
end || begin
1617+
on_existing_matching_groups({}) { |g| g.after(scope, *meta, &block) }
1618+
super(scope, *meta, &block)
1619+
end
16171620
end
16181621
alias_method :prepend_after, :after
16191622

@@ -1631,11 +1634,12 @@ def after(scope=nil, *meta, &block)
16311634
# @see #before
16321635
# @see #prepend_before
16331636
def append_after(scope=nil, *meta, &block)
1634-
on_existing_matching_groups({}) { |g| g.append_after(scope, *meta, &block) }
1635-
16361637
handle_suite_hook(scope, meta) do
16371638
@after_suite_hooks << Hooks::AfterHook.new(block, {})
1638-
end || super(scope, *meta, &block)
1639+
end || begin
1640+
on_existing_matching_groups({}) { |g| g.append_after(scope, *meta, &block) }
1641+
super(scope, *meta, &block)
1642+
end
16391643
end
16401644

16411645
# Registers `block` as an `around` hook.

spec/rspec/core/hooks_filtering_spec.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,24 @@ module RSpec::Core
111111
:around_before_ex, :before_ex_1, :before_ex_2, :ex_2, :after_ex_1, :after_ex_2, :around_after_ex,
112112
]
113113
end
114+
115+
it "does not apply `suite` hooks to groups (or print warnings about suite hooks applied to example groups)" do
116+
sequence = []
117+
118+
group = RSpec.describe do
119+
example { sequence << :example }
120+
end
121+
122+
RSpec.configure do |c|
123+
c.before(:suite) { sequence << :before_suite }
124+
c.prepend_before(:suite) { sequence << :prepended_before_suite }
125+
c.after(:suite) { sequence << :after_suite }
126+
c.append_after(:suite) { sequence << :appended_after_suite }
127+
end
128+
129+
group.run
130+
expect(sequence).to eq [:example]
131+
end
114132
end
115133

116134
describe "unfiltered hooks" do

0 commit comments

Comments
 (0)