@qavajs/playwright-runner-adapter 1.0.1 → 1.1.1

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,13 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how
10
10
  :pencil: - chore
11
11
  :microscope: - experimental
12
12
 
13
+ ## [1.1.1]
14
+ - :beetle: fixed issue with After hooks execution in case of failed test
15
+
16
+ ## [1.1.0]
17
+ - :rocket: improved BeforeStep/AfterStep logging
18
+ - :beetle: fixed BeforeAll/AfterAll behavior
19
+
13
20
  ## [1.0.1]
14
21
  - :pencil: updated dependencies
15
22
  - :rocket: renamed adapter spec to cucumber.spec.ts
@@ -13,14 +13,29 @@ function attach(body, details) {
13
13
  }
14
14
  const fixture = new supportCodeLibrary.World({});
15
15
  const test = fixture.test;
16
+ const stepHandler = test.expect.extend({
17
+ async execute(fn) {
18
+ try {
19
+ await fn();
20
+ return {
21
+ pass: true,
22
+ message: () => ''
23
+ };
24
+ }
25
+ catch (e) {
26
+ return {
27
+ pass: false,
28
+ message: () => e.message,
29
+ };
30
+ }
31
+ }
32
+ });
33
+ for (const beforeAllHook of supportCodeLibrary.beforeTestRunHookDefinitions) {
34
+ test.beforeAll(() => beforeAllHook.code.apply({}));
35
+ }
16
36
  for (const feature of features) {
17
37
  const tests = feature.tests;
18
38
  test.describe(feature.feature, async () => {
19
- for (const beforeAllHook of supportCodeLibrary.beforeTestRunHookDefinitions) {
20
- test.beforeAll(async () => {
21
- await beforeAllHook.code.apply({});
22
- });
23
- }
24
39
  const world = new supportCodeLibrary.World({
25
40
  log,
26
41
  attach,
@@ -31,25 +46,27 @@ for (const feature of features) {
31
46
  const tag = testCase.tags.map((tag) => tag.name);
32
47
  test(testCase.name, { tag }, async () => {
33
48
  var _a, _b;
49
+ const testInfo = test.info();
34
50
  const result = { status: 'passed' };
35
51
  for (const beforeHook of supportCodeLibrary.beforeTestCaseHookDefinitions) {
36
52
  if (beforeHook.appliesToTestCase(testCase)) {
37
53
  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
- });
54
+ await test.step(hookName, () => beforeHook.code.apply(world, [{
55
+ pickle: testCase
56
+ }]));
43
57
  }
44
58
  }
45
59
  for (const pickleStep of testCase.steps) {
60
+ if (testInfo.error) {
61
+ break;
62
+ }
46
63
  await test.step(pickleStep.text, async () => {
47
64
  for (const beforeStep of supportCodeLibrary.beforeTestStepHookDefinitions) {
48
65
  if (beforeStep.appliesToTestCase(testCase)) {
49
- await beforeStep.code.apply(world, [{
66
+ await test.step('Before Step', () => beforeStep.code.apply(world, [{
50
67
  pickle: testCase,
51
68
  pickleStep
52
- }]);
69
+ }]));
53
70
  }
54
71
  }
55
72
  const steps = supportCodeLibrary.stepDefinitions
@@ -66,43 +83,33 @@ for (const feature of features) {
66
83
  },
67
84
  world
68
85
  });
69
- try {
70
- await step.code.apply(world, parameters);
71
- }
72
- catch (err) {
73
- result.status = 'failed';
74
- result.error = err;
75
- }
86
+ await stepHandler
87
+ .soft(() => step.code.apply(world, parameters), 'Step')
88
+ .execute();
76
89
  for (const afterStep of supportCodeLibrary.afterTestStepHookDefinitions) {
77
90
  if (afterStep.appliesToTestCase(testCase)) {
78
- await afterStep.code.apply(world, [{
91
+ await test.step('After Step', () => afterStep.code.apply(world, [{
79
92
  pickle: testCase,
80
93
  pickleStep,
81
94
  result
82
- }]);
95
+ }]));
83
96
  }
84
97
  }
85
- if (result.error)
86
- throw result.error;
87
98
  });
88
99
  }
89
100
  for (const afterHook of supportCodeLibrary.afterTestCaseHookDefinitions) {
90
101
  if (afterHook.appliesToTestCase(testCase)) {
91
102
  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
- });
103
+ await test.step(hookName, () => afterHook.code.apply(world, [{
104
+ pickle: testCase, result
105
+ }]));
97
106
  }
98
107
  }
99
108
  });
100
109
  }
101
- for (const afterAllHook of supportCodeLibrary.afterTestRunHookDefinitions) {
102
- test.afterAll(async function () {
103
- await afterAllHook.code.apply({});
104
- });
105
- }
106
110
  });
107
111
  }
112
+ for (const afterAllHook of supportCodeLibrary.afterTestRunHookDefinitions) {
113
+ test.afterAll(() => afterAllHook.code.apply({}));
114
+ }
108
115
  //# sourceMappingURL=cucumber.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cucumber.spec.js","sourceRoot":"","sources":["../src/cucumber.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cucumber.spec.js","sourceRoot":"","sources":["../src/cucumber.spec.ts"],"names":[],"mappings":";;AAAA,qCAAgC;AAEhC,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAC,GAAG,IAAA,aAAI,GAAE,CAAC;AAE/C,SAAS,GAAG,CAAC,IAAS;IAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,SAAS,MAAM,CAAsB,IAAS,EAAE,OAAY;;IACxD,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,QAAQ,mCAAI,YAAY,CAAC;IAClD,MAAM,WAAW,GAAG,MAAA,OAAO,CAAC,SAAS,mCAAI,YAAY,CAAC;IACtD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACjD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AAE1B,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACnC,KAAK,CAAC,OAAO,CAAC,EAAsB;QAChC,IAAI,CAAC;YACD,MAAM,EAAE,EAAE,CAAC;YACX,OAAO;gBACH,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE;aACpB,CAAA;QACL,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YACd,OAAO;gBACH,IAAI,EAAE,KAAK;gBACX,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO;aAC3B,CAAA;QACL,CAAC;IACL,CAAC;CACJ,CAAC,CAAC;AAEH,KAAK,MAAM,aAAa,IAAI,kBAAkB,CAAC,4BAA4B,EAAE,CAAC;IAC1E,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAiB,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC;YACvC,GAAG;YACH,MAAM;YACN,kBAAkB;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE5B,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAqB,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAC,GAAG,EAAC,EAAE,KAAK,IAAI,EAAE;;gBAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAoC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;gBACrE,KAAK,MAAM,UAAU,IAAI,kBAAkB,CAAC,6BAA6B,EAAE,CAAC;oBACxE,IAAI,UAAU,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACzC,MAAM,QAAQ,GAAG,MAAA,UAAU,CAAC,IAAI,mCAAI,QAAQ,CAAC;wBAC7C,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gCAC1D,MAAM,EAAE,QAAQ;6BACnB,CAAC,CAAC,CAAC,CAAC;oBACT,CAAC;gBACL,CAAC;gBACD,KAAK,MAAM,UAAU,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACtC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;wBACjB,MAAM;oBACV,CAAC;oBACD,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;wBACxC,KAAK,MAAM,UAAU,IAAI,kBAAkB,CAAC,6BAA6B,EAAE,CAAC;4BACxE,IAAI,UAAU,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;gCACzC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;wCAC/D,MAAM,EAAE,QAAQ;wCAChB,UAAU;qCACb,CAAC,CAAC,CAAC,CAAC;4BACT,CAAC;wBACL,CAAC;wBACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,eAAe;6BAC3C,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC/E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;4BAAE,MAAM,IAAI,KAAK,CAAC,SAAS,UAAU,CAAC,IAAI,kBAAkB,CAAC,CAAC;wBACpF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;4BAAE,MAAM,IAAI,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,qCAAqC,CAAC,CAAC;wBAChG,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;wBACrB,MAAM,EAAC,UAAU,EAAC,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC;4BACpD,IAAI,EAAE;gCACF,IAAI,EAAE,UAAU,CAAC,IAAI;gCACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ;6BAChC;4BACD,KAAK;yBACD,CAAC,CAAC;wBACV,MAAM,WAAW;6BACZ,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC;6BACtD,OAAO,EAAE,CAAC;wBACf,KAAK,MAAM,SAAS,IAAI,kBAAkB,CAAC,4BAA4B,EAAE,CAAC;4BACtE,IAAI,SAAS,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;gCACxC,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;wCAC7D,MAAM,EAAE,QAAQ;wCAChB,UAAU;wCACV,MAAM;qCACT,CAAC,CAAC,CAAC,CAAC;4BACT,CAAC;wBACL,CAAC;oBACL,CAAC,CAAC,CAAC;gBACP,CAAC;gBACD,KAAK,MAAM,SAAS,IAAI,kBAAkB,CAAC,4BAA4B,EAAE,CAAC;oBACtE,IAAI,SAAS,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACxC,MAAM,QAAQ,GAAG,MAAA,SAAS,CAAC,IAAI,mCAAI,OAAO,CAAC;wBAC3C,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gCACzD,MAAM,EAAE,QAAQ,EAAE,MAAM;6BAC3B,CAAC,CAAC,CAAC,CAAC;oBACT,CAAC;gBACL,CAAC;YACL,CAAC,CAAC,CAAA;QACN,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAED,KAAK,MAAM,YAAY,IAAI,kBAAkB,CAAC,2BAA2B,EAAE,CAAC;IACxE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACrD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qavajs/playwright-runner-adapter",
3
- "version": "1.0.1",
3
+ "version": "1.1.1",
4
4
  "description": "adapter for playwright test runner",
5
5
  "scripts": {
6
6
  "build": "tsc",
@@ -11,12 +11,12 @@
11
11
  "license": "MIT",
12
12
  "dependencies": {
13
13
  "@cucumber/gherkin": "^30.0.4",
14
- "glob": "^11.0.0"
14
+ "glob": "^11.0.1"
15
15
  },
16
16
  "devDependencies": {
17
- "@cucumber/cucumber": "^11.1.1",
17
+ "@cucumber/cucumber": "^11.2.0",
18
18
  "@playwright/test": "^1.49.1",
19
- "@types/node": "^22.10.2",
20
- "typescript": "^5.7.2"
19
+ "@types/node": "^22.10.6",
20
+ "typescript": "^5.7.3"
21
21
  }
22
22
  }
@@ -1,6 +1,6 @@
1
1
  import { load } from './loader';
2
2
 
3
- const { features, supportCodeLibrary } = load();
3
+ const { features, supportCodeLibrary} = load();
4
4
 
5
5
  function log(data: any) {
6
6
  console.log(data);
@@ -9,21 +9,36 @@ function log(data: any) {
9
9
  function attach(this: { test: any }, body: any, details: any) {
10
10
  const fileName = details.fileName ?? 'attachment';
11
11
  const contentType = details.mediaType ?? 'text/plain';
12
- this.test.info().attach(fileName, { body, contentType });
12
+ this.test.info().attach(fileName, {body, contentType});
13
13
  }
14
14
 
15
15
  const fixture = new supportCodeLibrary.World({});
16
16
  const test = fixture.test;
17
17
 
18
+ const stepHandler = test.expect.extend({
19
+ async execute(fn: () => Promise<any>) {
20
+ try {
21
+ await fn();
22
+ return {
23
+ pass: true,
24
+ message: () => ''
25
+ }
26
+ } catch (e: any) {
27
+ return {
28
+ pass: false,
29
+ message: () => e.message,
30
+ }
31
+ }
32
+ }
33
+ });
34
+
35
+ for (const beforeAllHook of supportCodeLibrary.beforeTestRunHookDefinitions) {
36
+ test.beforeAll(() => beforeAllHook.code.apply({}));
37
+ }
38
+
18
39
  for (const feature of features) {
19
40
  const tests = feature.tests;
20
41
  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
42
  const world = new supportCodeLibrary.World({
28
43
  log,
29
44
  attach,
@@ -34,26 +49,28 @@ for (const feature of features) {
34
49
 
35
50
  for (const testCase of tests) {
36
51
  const tag = testCase.tags.map((tag: { name: string }) => tag.name);
37
- test(testCase.name, { tag }, async () => {
52
+ test(testCase.name, {tag}, async () => {
53
+ const testInfo = test.info();
38
54
  const result: { status: string, error?: any } = { status: 'passed' };
39
55
  for (const beforeHook of supportCodeLibrary.beforeTestCaseHookDefinitions) {
40
56
  if (beforeHook.appliesToTestCase(testCase)) {
41
57
  const hookName = beforeHook.name ?? 'Before';
42
- await test.step(hookName, async () => {
43
- await beforeHook.code.apply(world, [{
44
- pickle: testCase
45
- }]);
46
- });
58
+ await test.step(hookName, () => beforeHook.code.apply(world, [{
59
+ pickle: testCase
60
+ }]));
47
61
  }
48
62
  }
49
63
  for (const pickleStep of testCase.steps) {
64
+ if (testInfo.error) {
65
+ break;
66
+ }
50
67
  await test.step(pickleStep.text, async () => {
51
68
  for (const beforeStep of supportCodeLibrary.beforeTestStepHookDefinitions) {
52
69
  if (beforeStep.appliesToTestCase(testCase)) {
53
- await beforeStep.code.apply(world, [{
70
+ await test.step('Before Step', () => beforeStep.code.apply(world, [{
54
71
  pickle: testCase,
55
72
  pickleStep
56
- }]);
73
+ }]));
57
74
  }
58
75
  }
59
76
  const steps = supportCodeLibrary.stepDefinitions
@@ -61,47 +78,40 @@ for (const feature of features) {
61
78
  if (steps.length === 0) throw new Error(`Step '${pickleStep.text}' is not defined`);
62
79
  if (steps.length > 1) throw new Error(`'${pickleStep.text}' matches multiple step definitions`);
63
80
  const [step] = steps;
64
- const { parameters} = await step.getInvocationParameters({
81
+ const {parameters} = await step.getInvocationParameters({
65
82
  step: {
66
83
  text: pickleStep.text,
67
84
  argument: pickleStep.argument
68
85
  },
69
86
  world
70
87
  } as any);
71
- try {
72
- await step.code.apply(world, parameters);
73
- } catch (err) {
74
- result.status = 'failed';
75
- result.error = err;
76
- }
88
+ await stepHandler
89
+ .soft(() => step.code.apply(world, parameters), 'Step')
90
+ .execute();
77
91
  for (const afterStep of supportCodeLibrary.afterTestStepHookDefinitions) {
78
92
  if (afterStep.appliesToTestCase(testCase)) {
79
- await afterStep.code.apply(world, [{
93
+ await test.step('After Step', () => afterStep.code.apply(world, [{
80
94
  pickle: testCase,
81
95
  pickleStep,
82
96
  result
83
- }]);
97
+ }]));
84
98
  }
85
99
  }
86
- if (result.error) throw result.error;
87
100
  });
88
101
  }
89
102
  for (const afterHook of supportCodeLibrary.afterTestCaseHookDefinitions) {
90
103
  if (afterHook.appliesToTestCase(testCase)) {
91
104
  const hookName = afterHook.name ?? 'After';
92
- await test.step(hookName, async () => {
93
- await afterHook.code.apply(world, [{
94
- pickle: testCase, result
95
- }]);
96
- });
105
+ await test.step(hookName, () => afterHook.code.apply(world, [{
106
+ pickle: testCase, result
107
+ }]));
97
108
  }
98
109
  }
99
110
  })
100
111
  }
101
- for (const afterAllHook of supportCodeLibrary.afterTestRunHookDefinitions) {
102
- test.afterAll(async function () {
103
- await afterAllHook.code.apply({});
104
- });
105
- }
106
112
  });
107
113
  }
114
+
115
+ for (const afterAllHook of supportCodeLibrary.afterTestRunHookDefinitions) {
116
+ test.afterAll(() => afterAllHook.code.apply({}));
117
+ }