From 9f778c5cb9afbb53566e96962d7f4943b98b5680 Mon Sep 17 00:00:00 2001 From: Michael Miller Date: Wed, 12 Sep 2018 21:31:44 -0600 Subject: [PATCH] Fix after_all hooks running too soon --- src/spectator/context.cr | 8 +++++--- src/spectator/dsl.cr | 1 + src/spectator/example.cr | 1 + 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/spectator/context.cr b/src/spectator/context.cr index a58b9e4..c121d53 100644 --- a/src/spectator/context.cr +++ b/src/spectator/context.cr @@ -50,10 +50,12 @@ module Spectator def run_after_all_hooks unless @after_all_hooks_run - @after_all_hooks.each do |hook| - hook.call + if all_examples.all?(&.finished?) + @after_all_hooks.each do |hook| + hook.call + end + @after_all_hooks_run = true end - @after_all_hooks_run = true end if (parent = @parent) parent.run_after_all_hooks diff --git a/src/spectator/dsl.cr b/src/spectator/dsl.cr index 76fc276..ad1cbee 100644 --- a/src/spectator/dsl.cr +++ b/src/spectator/dsl.cr @@ -161,6 +161,7 @@ module Spectator begin Example%example.new.%run({% for v, i in var_names %}%var{i}{% if i < var_names.size - 1 %}, {% end %}{% end %}) ensure + @finished = true context.run_after_each_hooks context.run_after_all_hooks end diff --git a/src/spectator/example.cr b/src/spectator/example.cr index 6fd75f0..8816a0f 100644 --- a/src/spectator/example.cr +++ b/src/spectator/example.cr @@ -3,6 +3,7 @@ require "./source" module Spectator abstract class Example getter context : Context + getter? finished = false def initialize(@context) end