From b66a59adb209a691423a18ea12b0b33c3ffca53e Mon Sep 17 00:00:00 2001 From: Tim Yao Date: Fri, 16 Sep 2022 09:43:33 +1000 Subject: [PATCH 1/3] init the feature test file for parallel before/afterAll hooks --- .../before_after_all_hooks_parallel.feature | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 features/before_after_all_hooks_parallel.feature diff --git a/features/before_after_all_hooks_parallel.feature b/features/before_after_all_hooks_parallel.feature new file mode 100644 index 000000000..c87e62347 --- /dev/null +++ b/features/before_after_all_hooks_parallel.feature @@ -0,0 +1,52 @@ +Feature: Before/AfterAll hooks in parallel + + When running in parallel, Cucumber-JS runs some code on a "Co-ordinator" process, + but all the user code runs in a "Worker" process. + + When defining BeforeAll/AfterAll hooks, you can choose whather to run them on + the coordinator, the worker, or both. + + Background: + Given a file named "features/a.feature" with: + """ + Feature: some feature + Scenario: first scenario + Given first step + + Scenario: second scenario + Given second step + """ + + Scenario: Just run the AfterAll hooks once, on the coordinator + + Given a file named "features/support/hooks.js" with: + """ + const {AfterAll, HookParallelMode, Given} = require('@cucumber/cucumber') + const {expect} = require('chai') + + let counter = 0 + + Given('first step', function() { + counter += counter + expect(counter).to.eql(1) + }) + + Given('second step', function() { + counter += counter + expect(counter).to.eql(1) + }) + + AfterAll({ parallelMode: HookParallelMode.WORKER_ONLY }, function() { + counter += counter + expect(counter).to.eql(2) + }) + + AfterAll({ parallelMode: HookParallelMode.COORDINATOR_ONLY }, function() { + counter += counter + expect(counter).to.eql(1) + }) + """ + When I run cucumber-js with `--parallel 2` + Then it passes + + Rule: Coordinator's AfterAll hook should run after the Workers' AfterAllHooks From baf7fc4051eb6c2def09d77c0e97e13a2a4cc438 Mon Sep 17 00:00:00 2001 From: Tim Yao Date: Fri, 16 Sep 2022 10:01:13 +1000 Subject: [PATCH 2/3] Added the HookParallelMode --- features/before_after_all_hooks_parallel.feature | 10 ++++++---- src/index.ts | 4 ++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/features/before_after_all_hooks_parallel.feature b/features/before_after_all_hooks_parallel.feature index c87e62347..74d1752b7 100644 --- a/features/before_after_all_hooks_parallel.feature +++ b/features/before_after_all_hooks_parallel.feature @@ -27,22 +27,24 @@ Feature: Before/AfterAll hooks in parallel let counter = 0 Given('first step', function() { - counter += counter + counter ++ expect(counter).to.eql(1) }) Given('second step', function() { - counter += counter + counter ++ expect(counter).to.eql(1) }) AfterAll({ parallelMode: HookParallelMode.WORKER_ONLY }, function() { - counter += counter + counter ++ + console.log('worker: ', counter) expect(counter).to.eql(2) }) AfterAll({ parallelMode: HookParallelMode.COORDINATOR_ONLY }, function() { - counter += counter + counter ++ + console.log('coordinator: ', counter) expect(counter).to.eql(1) }) """ diff --git a/src/index.ts b/src/index.ts index b65eb0dc4..dd1ca3cb8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -38,6 +38,10 @@ export const Before = methods.Before export const BeforeAll = methods.BeforeAll export const BeforeStep = methods.BeforeStep export const defineParameterType = methods.defineParameterType +export const HookParallelMode = { + WORKER_ONLY: 'worker-only', + COORDINATOR_ONLY: 'coordinator-only', +} /** * @deprecated use `Given`, `When` or `Then` instead; see */ From 0cbfee1b28fc5cedc9fe6bbc05b8c807d90abd4e Mon Sep 17 00:00:00 2001 From: David Goss Date: Sun, 29 Jan 2023 13:11:01 +0000 Subject: [PATCH 3/3] fix bad merge --- src/index.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index 78d480eb3..b3176671e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -35,10 +35,6 @@ export const Before = methods.Before export const BeforeAll = methods.BeforeAll export const BeforeStep = methods.BeforeStep export const defineParameterType = methods.defineParameterType -/** - * @deprecated use `Given`, `When` or `Then` instead; see - */ -export const defineStep = methods.defineStep export const Given = methods.Given export const setDefaultTimeout = methods.setDefaultTimeout export const setDefinitionFunctionWrapper = methods.setDefinitionFunctionWrapper