From 6828ef2b39bfaaef88445b80f825bb176bd2bfd2 Mon Sep 17 00:00:00 2001 From: Sandro Turriate Date: Thu, 27 Feb 2014 23:31:36 -0800 Subject: [PATCH] Fix before(:all) operating as before(:each) Now, when we detect a before(:all), we distribute the entire group, instead of distributing each example within the group --- lib/specjour/loader.rb | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/lib/specjour/loader.rb b/lib/specjour/loader.rb index 5e75991..822bd3b 100644 --- a/lib/specjour/loader.rb +++ b/lib/specjour/loader.rb @@ -99,20 +99,33 @@ def rspec_examples end end + # recursively gather groups containing a before(:all) hook, and examples + def gather_groups(groups) + groups.map do |g| + before_all_hooks = g.send(:find_hook, :before, :all, nil, nil) + if before_all_hooks.any? + g + else + (g.filtered_examples || []) + gather_groups(g.children) + end + end.flatten + end + def filtered_examples examples = ::RSpec.world.example_groups.map do |g| g.descendant_filtered_examples end.flatten - locations = examples.map do |e| - meta = e.metadata - groups = e.example_group.parent_groups + [e.example_group] - shared_group = groups.detect do |group| - group.metadata[:shared_group_name] - end - if shared_group - meta = shared_group.metadata[:example_group] + executables = gather_groups(::RSpec.world.example_groups) + locations = executables.map do |e| + if e.respond_to?(:examples) + e.metadata[:example_group][:location] + else + if e.example_group.metadata[:shared_group_name] + e.metadata[:example_group][:location] + else + e.metadata[:location] + end end - meta[:location] end ensure ::RSpec.reset