@qavajs/playwright-runner-adapter 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -10,6 +10,14 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how
10
10
  :pencil: - chore
11
11
  :microscope: - experimental
12
12
 
13
+ ## [1.1.0]
14
+ - :rocket: improved BeforeStep/AfterStep logging
15
+ - :beetle: fixed BeforeAll/AfterAll behavior
16
+
17
+ ## [1.0.1]
18
+ - :pencil: updated dependencies
19
+ - :rocket: renamed adapter spec to cucumber.spec.ts
20
+
13
21
  ## [1.0.0]
14
22
  - :rocket: added `executeStep` method to world to execute step definitions programmatically
15
23
  ```typescript
@@ -13,14 +13,12 @@ function attach(body, details) {
13
13
  }
14
14
  const fixture = new supportCodeLibrary.World({});
15
15
  const test = fixture.test;
16
+ for (const beforeAllHook of supportCodeLibrary.beforeTestRunHookDefinitions) {
17
+ test.beforeAll(() => beforeAllHook.code.apply({}));
18
+ }
16
19
  for (const feature of features) {
17
20
  const tests = feature.tests;
18
21
  test.describe(feature.feature, async () => {
19
- for (const beforeAllHook of supportCodeLibrary.beforeTestRunHookDefinitions) {
20
- test.beforeAll(async () => {
21
- await beforeAllHook.code.apply({});
22
- });
23
- }
24
22
  const world = new supportCodeLibrary.World({
25
23
  log,
26
24
  attach,
@@ -35,21 +33,19 @@ for (const feature of features) {
35
33
  for (const beforeHook of supportCodeLibrary.beforeTestCaseHookDefinitions) {
36
34
  if (beforeHook.appliesToTestCase(testCase)) {
37
35
  const hookName = (_a = beforeHook.name) !== null && _a !== void 0 ? _a : 'Before';
38
- await test.step(hookName, async () => {
39
- await beforeHook.code.apply(world, [{
40
- pickle: testCase
41
- }]);
42
- });
36
+ await test.step(hookName, () => beforeHook.code.apply(world, [{
37
+ pickle: testCase
38
+ }]));
43
39
  }
44
40
  }
45
41
  for (const pickleStep of testCase.steps) {
46
42
  await test.step(pickleStep.text, async () => {
47
43
  for (const beforeStep of supportCodeLibrary.beforeTestStepHookDefinitions) {
48
44
  if (beforeStep.appliesToTestCase(testCase)) {
49
- await beforeStep.code.apply(world, [{
45
+ await test.step('Before Step', () => beforeStep.code.apply(world, [{
50
46
  pickle: testCase,
51
47
  pickleStep
52
- }]);
48
+ }]));
53
49
  }
54
50
  }
55
51
  const steps = supportCodeLibrary.stepDefinitions
@@ -75,11 +71,11 @@ for (const feature of features) {
75
71
  }
76
72
  for (const afterStep of supportCodeLibrary.afterTestStepHookDefinitions) {
77
73
  if (afterStep.appliesToTestCase(testCase)) {
78
- await afterStep.code.apply(world, [{
74
+ await test.step('After Step', () => afterStep.code.apply(world, [{
79
75
  pickle: testCase,
80
76
  pickleStep,
81
77
  result
82
- }]);
78
+ }]));
83
79
  }
84
80
  }
85
81
  if (result.error)
@@ -89,20 +85,16 @@ for (const feature of features) {
89
85
  for (const afterHook of supportCodeLibrary.afterTestCaseHookDefinitions) {
90
86
  if (afterHook.appliesToTestCase(testCase)) {
91
87
  const hookName = (_b = afterHook.name) !== null && _b !== void 0 ? _b : 'After';
92
- await test.step(hookName, async () => {
93
- await afterHook.code.apply(world, [{
94
- pickle: testCase, result
95
- }]);
96
- });
88
+ await test.step(hookName, () => afterHook.code.apply(world, [{
89
+ pickle: testCase, result
90
+ }]));
97
91
  }
98
92
  }
99
93
  });
100
94
  }
101
- for (const afterAllHook of supportCodeLibrary.afterTestRunHookDefinitions) {
102
- test.afterAll(async function () {
103
- await afterAllHook.code.apply({});
104
- });
105
- }
106
95
  });
107
96
  }
108
- //# sourceMappingURL=adapter.spec.js.map
97
+ for (const afterAllHook of supportCodeLibrary.afterTestRunHookDefinitions) {
98
+ test.afterAll(() => afterAllHook.code.apply({}));
99
+ }
100
+ //# sourceMappingURL=cucumber.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cucumber.spec.js","sourceRoot":"","sources":["../src/cucumber.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qavajs/playwright-runner-adapter",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "adapter for playwright test runner",
5
5
  "scripts": {
6
6
  "build": "tsc",
@@ -10,13 +10,13 @@
10
10
  "author": "Alexandr Galichenko",
11
11
  "license": "MIT",
12
12
  "dependencies": {
13
- "@cucumber/gherkin": "^29.0.0",
13
+ "@cucumber/gherkin": "^30.0.4",
14
14
  "glob": "^11.0.0"
15
15
  },
16
16
  "devDependencies": {
17
- "@cucumber/cucumber": "^11.1.0",
18
- "@playwright/test": "^1.49.0",
19
- "@types/node": "^22.10.1",
17
+ "@cucumber/cucumber": "^11.1.1",
18
+ "@playwright/test": "^1.49.1",
19
+ "@types/node": "^22.10.5",
20
20
  "typescript": "^5.7.2"
21
21
  }
22
22
  }
@@ -15,15 +15,13 @@ function attach(this: { test: any }, body: any, details: any) {
15
15
  const fixture = new supportCodeLibrary.World({});
16
16
  const test = fixture.test;
17
17
 
18
+ for (const beforeAllHook of supportCodeLibrary.beforeTestRunHookDefinitions) {
19
+ test.beforeAll(() => beforeAllHook.code.apply({}));
20
+ }
21
+
18
22
  for (const feature of features) {
19
23
  const tests = feature.tests;
20
24
  test.describe(feature.feature as string, async () => {
21
- for (const beforeAllHook of supportCodeLibrary.beforeTestRunHookDefinitions) {
22
- test.beforeAll(async () => {
23
- await beforeAllHook.code.apply({});
24
- });
25
- }
26
-
27
25
  const world = new supportCodeLibrary.World({
28
26
  log,
29
27
  attach,
@@ -39,28 +37,26 @@ for (const feature of features) {
39
37
  for (const beforeHook of supportCodeLibrary.beforeTestCaseHookDefinitions) {
40
38
  if (beforeHook.appliesToTestCase(testCase)) {
41
39
  const hookName = beforeHook.name ?? 'Before';
42
- await test.step(hookName, async () => {
43
- await beforeHook.code.apply(world, [{
44
- pickle: testCase
45
- }]);
46
- });
40
+ await test.step(hookName, () => beforeHook.code.apply(world, [{
41
+ pickle: testCase
42
+ }]));
47
43
  }
48
44
  }
49
45
  for (const pickleStep of testCase.steps) {
50
46
  await test.step(pickleStep.text, async () => {
51
47
  for (const beforeStep of supportCodeLibrary.beforeTestStepHookDefinitions) {
52
48
  if (beforeStep.appliesToTestCase(testCase)) {
53
- await beforeStep.code.apply(world, [{
49
+ await test.step('Before Step', () => beforeStep.code.apply(world, [{
54
50
  pickle: testCase,
55
51
  pickleStep
56
- }]);
52
+ }]));
57
53
  }
58
54
  }
59
55
  const steps = supportCodeLibrary.stepDefinitions
60
56
  .filter(stepDefinition => stepDefinition.matchesStepName(pickleStep.text));
61
57
  if (steps.length === 0) throw new Error(`Step '${pickleStep.text}' is not defined`);
62
58
  if (steps.length > 1) throw new Error(`'${pickleStep.text}' matches multiple step definitions`);
63
- const [step] = steps;
59
+ const [ step ] = steps;
64
60
  const { parameters} = await step.getInvocationParameters({
65
61
  step: {
66
62
  text: pickleStep.text,
@@ -76,11 +72,11 @@ for (const feature of features) {
76
72
  }
77
73
  for (const afterStep of supportCodeLibrary.afterTestStepHookDefinitions) {
78
74
  if (afterStep.appliesToTestCase(testCase)) {
79
- await afterStep.code.apply(world, [{
75
+ await test.step('After Step', () => afterStep.code.apply(world, [{
80
76
  pickle: testCase,
81
77
  pickleStep,
82
78
  result
83
- }]);
79
+ }]));
84
80
  }
85
81
  }
86
82
  if (result.error) throw result.error;
@@ -89,19 +85,16 @@ for (const feature of features) {
89
85
  for (const afterHook of supportCodeLibrary.afterTestCaseHookDefinitions) {
90
86
  if (afterHook.appliesToTestCase(testCase)) {
91
87
  const hookName = afterHook.name ?? 'After';
92
- await test.step(hookName, async () => {
93
- await afterHook.code.apply(world, [{
94
- pickle: testCase, result
95
- }]);
96
- });
88
+ await test.step(hookName, () => afterHook.code.apply(world, [{
89
+ pickle: testCase, result
90
+ }]));
97
91
  }
98
92
  }
99
93
  })
100
94
  }
101
- for (const afterAllHook of supportCodeLibrary.afterTestRunHookDefinitions) {
102
- test.afterAll(async function () {
103
- await afterAllHook.code.apply({});
104
- });
105
- }
106
95
  });
107
96
  }
97
+
98
+ for (const afterAllHook of supportCodeLibrary.afterTestRunHookDefinitions) {
99
+ test.afterAll(() => afterAllHook.code.apply({}));
100
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.spec.js","sourceRoot":"","sources":["../src/adapter.spec.ts"],"names":[],"mappings":"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"}