From c837b26d39fbf409fe3ef93fdfab7cb21ec08418 Mon Sep 17 00:00:00 2001 From: Colin Ihrig Date: Thu, 27 Oct 2022 04:27:35 -0400 Subject: [PATCH] test_runner: call {before,after}Each() on suites Prior to this commit, beforeEach() and afterEach() hooks were not called on test suites (describe()). This commit addresses that. Fixes: https://github.com/nodejs/node/issues/45028 PR-URL: https://github.com/nodejs/node/pull/45161 Reviewed-By: Moshe Atlow Reviewed-By: Yagiz Nizipli Reviewed-By: James M Snell --- lib/internal/test_runner/test.js | 11 +++++++++++ test/message/test_runner_hooks.js | 2 ++ test/message/test_runner_test_name_pattern.js | 4 ++-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/internal/test_runner/test.js b/lib/internal/test_runner/test.js index dd686607e9427d..c7cf9e36129d96 100644 --- a/lib/internal/test_runner/test.js +++ b/lib/internal/test_runner/test.js @@ -731,13 +731,24 @@ class Suite extends Test { } const hookArgs = this.getRunArgs(); + + if (this.parent?.hooks.beforeEach.length > 0) { + await this.parent[kRunHook]('beforeEach', hookArgs); + } + await this[kRunHook]('before', hookArgs); + const stopPromise = stopTest(this.timeout, this.signal); const subtests = this.skipped || this.error ? [] : this.subtests; const promise = SafePromiseAll(subtests, (subtests) => subtests.start()); await SafePromiseRace([promise, stopPromise]); await this[kRunHook]('after', hookArgs); + + if (this.parent?.hooks.afterEach.length > 0) { + await this.parent[kRunHook]('afterEach', hookArgs); + } + this.pass(); } catch (err) { if (isTestFailureError(err)) { diff --git a/test/message/test_runner_hooks.js b/test/message/test_runner_hooks.js index 2c3526ae510e3f..4820b01470d0fe 100644 --- a/test/message/test_runner_hooks.js +++ b/test/message/test_runner_hooks.js @@ -15,10 +15,12 @@ describe('describe hooks', () => { 'before describe hooks', 'beforeEach 1', '1', 'afterEach 1', 'beforeEach 2', '2', 'afterEach 2', + 'beforeEach nested', 'before nested', 'beforeEach nested 1', 'nested 1', 'afterEach nested 1', 'beforeEach nested 2', 'nested 2', 'afterEach nested 2', 'after nested', + 'afterEach nested', 'after describe hooks', ]); }); diff --git a/test/message/test_runner_test_name_pattern.js b/test/message/test_runner_test_name_pattern.js index 1c3166be53812c..86bc45d7d4c85d 100644 --- a/test/message/test_runner_test_name_pattern.js +++ b/test/message/test_runner_test_name_pattern.js @@ -34,8 +34,8 @@ test('top level test enabled', common.mustCall(async (t) => { describe('top level describe enabled', () => { before(common.mustCall()); - beforeEach(common.mustCall(2)); - afterEach(common.mustCall(2)); + beforeEach(common.mustCall(4)); + afterEach(common.mustCall(4)); after(common.mustCall()); it('nested it disabled', common.mustNotCall());