@testomatio/reporter 2.0.1-beta.5-timestamp → 2.0.1-beta.6

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.
Files changed (149) hide show
  1. package/README.md +1 -0
  2. package/lib/adapter/codecept.d.ts +2 -0
  3. package/lib/adapter/codecept.js +293 -335
  4. package/lib/adapter/cucumber/current.d.ts +14 -0
  5. package/lib/adapter/cucumber/current.js +195 -203
  6. package/lib/adapter/cucumber/legacy.d.ts +0 -0
  7. package/lib/adapter/cucumber/legacy.js +130 -155
  8. package/lib/adapter/cucumber.d.ts +2 -0
  9. package/lib/adapter/cucumber.js +5 -16
  10. package/lib/adapter/cypress-plugin/index.d.ts +2 -0
  11. package/lib/adapter/cypress-plugin/index.js +91 -105
  12. package/lib/adapter/jasmine.d.ts +11 -0
  13. package/lib/adapter/jasmine.js +54 -53
  14. package/lib/adapter/jest.d.ts +13 -0
  15. package/lib/adapter/jest.js +97 -99
  16. package/lib/adapter/mocha.d.ts +2 -0
  17. package/lib/adapter/mocha.js +112 -141
  18. package/lib/adapter/nightwatch.d.ts +4 -0
  19. package/lib/adapter/nightwatch.js +80 -0
  20. package/lib/adapter/playwright.d.ts +14 -0
  21. package/lib/adapter/playwright.js +199 -231
  22. package/lib/adapter/vitest.d.ts +35 -0
  23. package/lib/adapter/vitest.js +150 -149
  24. package/lib/adapter/webdriver.d.ts +24 -0
  25. package/lib/adapter/webdriver.js +144 -121
  26. package/lib/bin/cli.d.ts +2 -0
  27. package/lib/bin/cli.js +229 -211
  28. package/lib/bin/reportXml.d.ts +2 -0
  29. package/lib/bin/reportXml.js +51 -52
  30. package/lib/bin/startTest.d.ts +2 -0
  31. package/lib/bin/startTest.js +83 -95
  32. package/lib/bin/uploadArtifacts.d.ts +2 -0
  33. package/lib/bin/uploadArtifacts.js +56 -61
  34. package/lib/client.d.ts +76 -0
  35. package/lib/client.js +429 -465
  36. package/lib/config.d.ts +1 -0
  37. package/lib/config.js +18 -23
  38. package/lib/constants.d.ts +25 -0
  39. package/lib/constants.js +50 -44
  40. package/lib/data-storage.d.ts +34 -0
  41. package/lib/data-storage.js +216 -188
  42. package/lib/junit-adapter/adapter.d.ts +9 -0
  43. package/lib/junit-adapter/adapter.js +17 -20
  44. package/lib/junit-adapter/csharp.d.ts +5 -0
  45. package/lib/junit-adapter/csharp.js +28 -14
  46. package/lib/junit-adapter/index.d.ts +3 -0
  47. package/lib/junit-adapter/index.js +27 -25
  48. package/lib/junit-adapter/java.d.ts +5 -0
  49. package/lib/junit-adapter/java.js +41 -53
  50. package/lib/junit-adapter/javascript.d.ts +4 -0
  51. package/lib/junit-adapter/javascript.js +30 -27
  52. package/lib/junit-adapter/python.d.ts +5 -0
  53. package/lib/junit-adapter/python.js +38 -37
  54. package/lib/junit-adapter/ruby.d.ts +4 -0
  55. package/lib/junit-adapter/ruby.js +11 -8
  56. package/lib/output.d.ts +11 -0
  57. package/lib/output.js +44 -52
  58. package/lib/package.json +3 -0
  59. package/lib/pipe/bitbucket.d.ts +25 -0
  60. package/lib/pipe/bitbucket.js +223 -230
  61. package/lib/pipe/csv.d.ts +47 -0
  62. package/lib/pipe/csv.js +113 -126
  63. package/lib/pipe/debug.d.ts +29 -0
  64. package/lib/pipe/debug.js +125 -99
  65. package/lib/pipe/github.d.ts +30 -0
  66. package/lib/pipe/github.js +218 -213
  67. package/lib/pipe/gitlab.d.ts +25 -0
  68. package/lib/pipe/gitlab.js +183 -206
  69. package/lib/pipe/html.d.ts +35 -0
  70. package/lib/pipe/html.js +258 -321
  71. package/lib/pipe/index.d.ts +1 -0
  72. package/lib/pipe/index.js +94 -66
  73. package/lib/pipe/testomatio.d.ts +71 -0
  74. package/lib/pipe/testomatio.js +429 -474
  75. package/lib/replay.d.ts +31 -0
  76. package/lib/replay.js +255 -0
  77. package/lib/reporter-functions.d.ts +34 -0
  78. package/lib/reporter-functions.js +28 -26
  79. package/lib/reporter.d.ts +232 -0
  80. package/lib/reporter.js +34 -29
  81. package/lib/services/artifacts.d.ts +33 -0
  82. package/lib/services/artifacts.js +55 -51
  83. package/lib/services/index.d.ts +9 -0
  84. package/lib/services/index.js +14 -12
  85. package/lib/services/key-values.d.ts +27 -0
  86. package/lib/services/key-values.js +56 -53
  87. package/lib/services/logger.d.ts +64 -0
  88. package/lib/services/logger.js +226 -245
  89. package/lib/template/testomatio.hbs +1026 -1366
  90. package/lib/uploader.d.ts +60 -0
  91. package/lib/uploader.js +295 -364
  92. package/lib/utils/pipe_utils.d.ts +41 -0
  93. package/lib/utils/pipe_utils.js +89 -85
  94. package/lib/utils/utils.d.ts +54 -0
  95. package/lib/utils/utils.js +398 -307
  96. package/lib/xmlReader.d.ts +92 -0
  97. package/lib/xmlReader.js +525 -532
  98. package/package.json +64 -21
  99. package/src/adapter/codecept.js +373 -0
  100. package/src/adapter/cucumber/current.js +228 -0
  101. package/src/adapter/cucumber/legacy.js +158 -0
  102. package/src/adapter/cucumber.js +4 -0
  103. package/src/adapter/cypress-plugin/index.js +110 -0
  104. package/src/adapter/jasmine.js +60 -0
  105. package/src/adapter/jest.js +107 -0
  106. package/src/adapter/mocha.cjs +2 -0
  107. package/src/adapter/mocha.js +156 -0
  108. package/src/adapter/nightwatch.js +88 -0
  109. package/src/adapter/playwright.js +254 -0
  110. package/src/adapter/vitest.js +183 -0
  111. package/src/adapter/webdriver.js +142 -0
  112. package/src/bin/cli.js +348 -0
  113. package/src/bin/reportXml.js +77 -0
  114. package/src/bin/startTest.js +124 -0
  115. package/src/bin/uploadArtifacts.js +91 -0
  116. package/src/client.js +515 -0
  117. package/src/config.js +30 -0
  118. package/src/constants.js +53 -0
  119. package/src/data-storage.js +204 -0
  120. package/src/junit-adapter/adapter.js +23 -0
  121. package/src/junit-adapter/csharp.js +28 -0
  122. package/src/junit-adapter/index.js +28 -0
  123. package/src/junit-adapter/java.js +58 -0
  124. package/src/junit-adapter/javascript.js +31 -0
  125. package/src/junit-adapter/python.js +42 -0
  126. package/src/junit-adapter/ruby.js +10 -0
  127. package/src/output.js +57 -0
  128. package/src/pipe/bitbucket.js +252 -0
  129. package/src/pipe/csv.js +140 -0
  130. package/src/pipe/debug.js +125 -0
  131. package/src/pipe/github.js +232 -0
  132. package/src/pipe/gitlab.js +247 -0
  133. package/src/pipe/html.js +373 -0
  134. package/src/pipe/index.js +71 -0
  135. package/src/pipe/testomatio.js +504 -0
  136. package/src/replay.js +262 -0
  137. package/src/reporter-functions.js +55 -0
  138. package/src/reporter.cjs_decprecated +21 -0
  139. package/src/reporter.js +33 -0
  140. package/src/services/artifacts.js +59 -0
  141. package/src/services/index.js +13 -0
  142. package/src/services/key-values.js +59 -0
  143. package/src/services/logger.js +315 -0
  144. package/src/template/emptyData.svg +23 -0
  145. package/src/template/testomatio.hbs +1081 -0
  146. package/src/uploader.js +376 -0
  147. package/src/utils/pipe_utils.js +119 -0
  148. package/src/utils/utils.js +416 -0
  149. package/src/xmlReader.js +614 -0
@@ -1,255 +1,223 @@
1
- const chalk = require('chalk');
2
- const crypto = require('crypto');
3
- const os = require('os');
4
- const path = require('path');
5
- const { v4: uuidv4 } = require('uuid');
6
- const fs = require('fs');
7
- const { APP_PREFIX, STATUS: Status, TESTOMAT_TMP_STORAGE_DIR } = require('../constants');
8
- const TestomatioClient = require('../client');
9
- const { getTestomatIdFromTestTitle, fileSystem } = require('../utils/utils');
10
- // const debug = require('debug')('@testomatio/reporter:adapter:playwright');
11
- const { services } = require('../services');
12
- const { dataStorage } = require('../data-storage');
13
-
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const picocolors_1 = __importDefault(require("picocolors"));
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ const os_1 = __importDefault(require("os"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const uuid_1 = require("uuid");
11
+ const fs_1 = __importDefault(require("fs"));
12
+ const constants_js_1 = require("../constants.js");
13
+ const client_js_1 = __importDefault(require("../client.js"));
14
+ const utils_js_1 = require("../utils/utils.js");
15
+ const index_js_1 = require("../services/index.js");
16
+ const data_storage_js_1 = require("../data-storage.js");
14
17
  const reportTestPromises = [];
15
-
16
18
  class PlaywrightReporter {
17
- constructor(config = {}) {
18
- this.client = new TestomatioClient({ apiKey: config?.apiKey });
19
-
20
- this.uploads = [];
21
- }
22
-
23
- onBegin(config, suite) {
24
- // clean data storage
25
- fileSystem.clearDir(TESTOMAT_TMP_STORAGE_DIR);
26
- if (!this.client) return;
27
- this.suite = suite;
28
- this.config = config;
29
- this.client.createRun();
30
- }
31
-
32
- onTestBegin(testInfo) {
33
- const fullTestTitle = getTestContextName(testInfo);
34
- dataStorage.setContext(fullTestTitle);
35
- }
36
-
37
- onTestEnd(test, result) {
38
- if (!this.client) return;
39
-
40
- const { title } = test;
41
- const { error, duration } = result;
42
- const suite_title = test.parent ? test.parent?.title : path.basename(test?.location?.file);
43
-
44
- const steps = [];
45
- for (const step of result.steps) {
46
- const appendedStep = appendStep(step);
47
- if (appendedStep) {
48
- steps.push(appendedStep);
49
- }
19
+ constructor(config = {}) {
20
+ this.client = new client_js_1.default({ apiKey: config?.apiKey });
21
+ this.uploads = [];
50
22
  }
51
-
52
- const fullTestTitle = getTestContextName(test);
53
- let logs = '';
54
- if (result.stderr.length || result.stdout.length) {
55
- logs = `\n\n${chalk.bold('Logs:')}\n${chalk.red(result.stderr.join(''))}\n${result.stdout.join('')}`;
23
+ onBegin(config, suite) {
24
+ // clean data storage
25
+ utils_js_1.fileSystem.clearDir(constants_js_1.TESTOMAT_TMP_STORAGE_DIR);
26
+ if (!this.client)
27
+ return;
28
+ this.suite = suite;
29
+ this.config = config;
30
+ this.client.createRun();
56
31
  }
57
- const manuallyAttachedArtifacts = services.artifacts.get(fullTestTitle);
58
- const testMeta = services.keyValues.get(fullTestTitle);
59
- const rid = test.id || test.testId || uuidv4();
60
-
61
- /**
62
- * @type {{
63
- * browser?: string,
64
- * dependencies: string[],
65
- * isMobile?: boolean
66
- * metadata: Record<string, any>,
67
- * name: string,
68
- * }}
69
- */
70
- const project = {
71
- browser: test.parent.project().use.defaultBrowserType,
72
- dependencies: test.parent.project().dependencies,
73
- isMobile: test.parent.project().use.isMobile,
74
- metadata: test.parent.project().metadata,
75
- name: test.parent.project().name,
76
- };
77
-
78
- const reportTestPromise = this.client.addTestRun(checkStatus(result.status), {
79
- rid: `${rid}-${project.name}`,
80
- error,
81
- test_id: getTestomatIdFromTestTitle(`${title} ${test.tags?.join(' ')}`),
82
- suite_title,
83
- title,
84
- steps: steps.length ? steps : undefined,
85
- time: duration,
86
- logs,
87
- manuallyAttachedArtifacts,
88
- meta: {
89
- browser: project.browser,
90
- isMobile: project.isMobile,
91
- project: project.name,
92
- projectDependencies: project.dependencies?.length ? project.dependencies : null,
93
- ...testMeta,
94
- ...project.metadata, // metadata has any type (in playwright), but we will stringify it in client.js
95
- },
96
- file: test.location?.file,
97
- });
98
-
99
- this.uploads.push({
100
- rid: `${rid}-${project.name}`,
101
- title: test.title,
102
- files: result.attachments.filter(a => a.body || a.path),
103
- file: test.location?.file,
104
- });
105
- // remove empty uploads
106
- this.uploads = this.uploads.filter(upload => upload.files.length);
107
-
108
- reportTestPromises.push(reportTestPromise);
109
- }
110
-
111
- #getArtifactPath(artifact) {
112
- if (artifact.path) {
113
- if (path.isAbsolute(artifact.path)) return artifact.path;
114
-
115
- return path.join(this.config.outputDir || this.config.projects[0].outputDir, artifact.path);
116
- }
117
-
118
- if (artifact.body) {
119
- let filePath = generateTmpFilepath(artifact.name);
120
-
121
- const extension = artifact.contentType?.split('/')[1]?.replace('jpeg', 'jpg');
122
- if (extension) filePath += `.${extension}`;
123
-
124
- fs.writeFileSync(filePath, artifact.body);
125
- return filePath;
32
+ onTestBegin(testInfo) {
33
+ const fullTestTitle = getTestContextName(testInfo);
34
+ data_storage_js_1.dataStorage.setContext(fullTestTitle);
126
35
  }
127
-
128
- return null;
129
- }
130
-
131
- async onEnd(result) {
132
- if (!this.client) return;
133
-
134
- await Promise.all(reportTestPromises);
135
-
136
- if (this.uploads.length) {
137
- if (this.client.uploader.isEnabled) console.log(APP_PREFIX, `🎞️ Uploading ${this.uploads.length} files...`);
138
-
139
- const promises = [];
140
-
141
- // ? possible move to addTestRun (needs investigation if files are ready)
142
- for (const upload of this.uploads) {
143
- const { rid, file, title } = upload;
144
-
145
- const files = upload.files.map(attachment => ({
146
- path: this.#getArtifactPath(attachment),
147
- title,
148
- type: attachment.contentType,
149
- }));
150
-
151
- if (!this.client.uploader.isEnabled) {
152
- files.forEach(f => this.client.uploader.storeUploadedFile(f, this.client.runId, rid, false));
153
- continue;
36
+ onTestEnd(test, result) {
37
+ // test.parent.project().__projectId
38
+ if (!this.client)
39
+ return;
40
+ const { title } = test;
41
+ const { error, duration } = result;
42
+ const suite_title = test.parent ? test.parent?.title : path_1.default.basename(test?.location?.file);
43
+ const steps = [];
44
+ for (const step of result.steps) {
45
+ const appendedStep = appendStep(step);
46
+ if (appendedStep) {
47
+ steps.push(appendedStep);
48
+ }
49
+ }
50
+ const fullTestTitle = getTestContextName(test);
51
+ let logs = '';
52
+ if (result.stderr.length || result.stdout.length) {
53
+ logs = `\n\n${picocolors_1.default.bold('Logs:')}\n${picocolors_1.default.red(result.stderr.join(''))}\n${result.stdout.join('')}`;
54
+ }
55
+ const manuallyAttachedArtifacts = index_js_1.services.artifacts.get(fullTestTitle);
56
+ const testMeta = index_js_1.services.keyValues.get(fullTestTitle);
57
+ const rid = test.id || test.testId || (0, uuid_1.v4)();
58
+ /**
59
+ * @type {{
60
+ * browser?: string,
61
+ * dependencies: string[],
62
+ * isMobile?: boolean
63
+ * metadata: Record<string, any>,
64
+ * name: string,
65
+ * }}
66
+ */
67
+ const project = {
68
+ browser: test.parent.project().use.defaultBrowserType,
69
+ dependencies: test.parent.project().dependencies,
70
+ isMobile: test.parent.project().use.isMobile,
71
+ metadata: test.parent.project().metadata,
72
+ name: test.parent.project().name,
73
+ };
74
+ let status = result.status;
75
+ // process test.fail() annotation
76
+ if (test.expectedStatus === 'failed') {
77
+ // actual status = expected
78
+ if (result.status === 'failed')
79
+ status = 'passed';
80
+ // actual status != expected
81
+ if (result.status === 'passed')
82
+ status = 'failed';
154
83
  }
155
-
156
- promises.push(
157
- this.client.addTestRun(undefined, {
158
- rid,
84
+ const reportTestPromise = this.client.addTestRun(checkStatus(status), {
85
+ rid: `${rid}-${project.name}`,
86
+ error,
87
+ test_id: (0, utils_js_1.getTestomatIdFromTestTitle)(`${title} ${test.tags?.join(' ')}`),
88
+ suite_title,
159
89
  title,
160
- files,
161
- file,
162
- }),
163
- );
164
- }
165
- await Promise.all(promises);
90
+ steps: steps.length ? steps : undefined,
91
+ time: duration,
92
+ logs,
93
+ manuallyAttachedArtifacts,
94
+ meta: {
95
+ browser: project.browser,
96
+ isMobile: project.isMobile,
97
+ project: project.name,
98
+ projectDependencies: project.dependencies?.length ? project.dependencies : null,
99
+ ...testMeta,
100
+ ...project.metadata, // metadata has any type (in playwright), but we will stringify it in client.js
101
+ ...test.annotations?.reduce((acc, annotation) => {
102
+ acc[annotation.type] = annotation.description;
103
+ return acc;
104
+ }, {}),
105
+ },
106
+ file: test.location?.file,
107
+ });
108
+ this.uploads.push({
109
+ rid: `${rid}-${project.name}`,
110
+ title: test.title,
111
+ files: result.attachments.filter(a => a.body || a.path),
112
+ file: test.location?.file,
113
+ });
114
+ // remove empty uploads
115
+ this.uploads = this.uploads.filter(anUpload => anUpload.files.length);
116
+ reportTestPromises.push(reportTestPromise);
117
+ }
118
+ #getArtifactPath(artifact) {
119
+ if (artifact.path) {
120
+ if (path_1.default.isAbsolute(artifact.path))
121
+ return artifact.path;
122
+ return path_1.default.join(this.config.outputDir || this.config.projects[0].outputDir, artifact.path);
123
+ }
124
+ if (artifact.body) {
125
+ let filePath = generateTmpFilepath(artifact.name);
126
+ const extension = artifact.contentType?.split('/')[1]?.replace('jpeg', 'jpg');
127
+ if (extension)
128
+ filePath += `.${extension}`;
129
+ fs_1.default.writeFileSync(filePath, artifact.body);
130
+ return filePath;
131
+ }
132
+ return null;
133
+ }
134
+ async onEnd(result) {
135
+ if (!this.client)
136
+ return;
137
+ await Promise.all(reportTestPromises);
138
+ if (this.uploads.length) {
139
+ if (this.client.uploader.isEnabled)
140
+ console.log(constants_js_1.APP_PREFIX, `🎞️ Uploading ${this.uploads.length} files...`);
141
+ const promises = [];
142
+ // ? possible move to addTestRun (needs investigation if files are ready)
143
+ for (const upload of this.uploads) {
144
+ const { rid, file, title } = upload;
145
+ const files = upload.files.map(attachment => ({
146
+ path: this.#getArtifactPath(attachment),
147
+ title,
148
+ type: attachment.contentType,
149
+ }));
150
+ if (!this.client.uploader.isEnabled) {
151
+ files.forEach(f => this.client.uploader.storeUploadedFile(f, this.client.runId, rid, false));
152
+ continue;
153
+ }
154
+ promises.push(this.client.addTestRun(undefined, {
155
+ rid,
156
+ title,
157
+ files,
158
+ file,
159
+ }));
160
+ }
161
+ await Promise.all(promises);
162
+ }
163
+ await this.client.updateRunStatus(checkStatus(result.status));
166
164
  }
167
-
168
- await this.client.updateRunStatus(checkStatus(result.status));
169
- }
170
165
  }
171
-
172
166
  function checkStatus(status) {
173
- return (
174
- {
175
- skipped: Status.SKIPPED,
176
- timedOut: Status.FAILED,
177
- passed: Status.PASSED,
178
- }[status] || Status.FAILED
179
- );
167
+ return ({
168
+ skipped: constants_js_1.STATUS.SKIPPED,
169
+ timedOut: constants_js_1.STATUS.FAILED,
170
+ passed: constants_js_1.STATUS.PASSED,
171
+ }[status] || constants_js_1.STATUS.FAILED);
180
172
  }
181
-
182
173
  function appendStep(step, shift = 0) {
183
- // nesting too deep, ignore those steps
184
- if (shift >= 10) return;
185
-
186
- let newCategory = step.category;
187
- switch (newCategory) {
188
- case 'test.step':
189
- newCategory = 'user';
190
- break;
191
- case 'hook':
192
- newCategory = 'hook';
193
- break;
194
- case 'attach':
195
- return null; // Skip steps with category 'attach'
196
- default:
197
- newCategory = 'framework';
198
- }
199
-
200
- const formattedSteps = [];
201
- for (const child of step.steps || []) {
202
- const appendedChild = appendStep(child, shift + 2);
203
- if (appendedChild) {
204
- formattedSteps.push(appendedChild);
174
+ // nesting too deep, ignore those steps
175
+ if (shift >= 10)
176
+ return;
177
+ let newCategory = step.category;
178
+ switch (newCategory) {
179
+ case 'test.step':
180
+ newCategory = 'user';
181
+ break;
182
+ case 'hook':
183
+ newCategory = 'hook';
184
+ break;
185
+ case 'attach':
186
+ return null; // Skip steps with category 'attach'
187
+ default:
188
+ newCategory = 'framework';
189
+ }
190
+ const formattedSteps = [];
191
+ for (const child of step.steps || []) {
192
+ const appendedChild = appendStep(child, shift + 2);
193
+ if (appendedChild) {
194
+ formattedSteps.push(appendedChild);
195
+ }
205
196
  }
206
- }
207
-
208
- const resultStep = {
209
- category: newCategory,
210
- title: step.title,
211
- duration: step.duration,
212
- };
213
-
214
- if (formattedSteps.length) {
215
- resultStep.steps = formattedSteps.filter(s => !!s);
216
- }
217
-
218
- if (step.error !== undefined) {
219
- resultStep.error = step.error;
220
- }
221
-
222
- return resultStep;
197
+ const resultStep = {
198
+ category: newCategory,
199
+ title: step.title,
200
+ duration: step.duration,
201
+ };
202
+ if (formattedSteps.length) {
203
+ resultStep.steps = formattedSteps.filter(s => !!s);
204
+ }
205
+ if (step.error !== undefined) {
206
+ resultStep.error = step.error;
207
+ }
208
+ return resultStep;
223
209
  }
224
-
225
210
  function generateTmpFilepath(filename = '') {
226
- filename = filename || `tmp.${crypto.randomBytes(16).toString('hex')}`;
227
- const tmpdir = os.tmpdir();
228
- return path.join(tmpdir, filename);
211
+ filename = filename || `tmp.${crypto_1.default.randomBytes(16).toString('hex')}`;
212
+ const tmpdir = os_1.default.tmpdir();
213
+ return path_1.default.join(tmpdir, filename);
229
214
  }
230
-
231
215
  /**
232
216
  * Returns filename + test title
233
217
  * @param {*} test - testInfo object from Playwright
234
218
  * @returns
235
219
  */
236
220
  function getTestContextName(test) {
237
- return `${test._requireFile || ''}_${test.title}`;
238
- }
239
-
240
- function initPlaywrightForStorage() {
241
- try {
242
- // @ts-ignore-next-line
243
- // eslint-disable-next-line import/no-unresolved
244
- const { test } = require('@playwright/test');
245
- // eslint-disable-next-line no-empty-pattern
246
- test.beforeEach(async ({}, testInfo) => {
247
- global.testomatioTestTitle = `${testInfo.file || ''}_${testInfo.title}`;
248
- });
249
- } catch (e) {
250
- // ignore
251
- }
221
+ return `${test._requireFile || ''}_${test.title}`;
252
222
  }
253
-
254
223
  module.exports = PlaywrightReporter;
255
- module.exports.initPlaywrightForStorage = initPlaywrightForStorage;
@@ -0,0 +1,35 @@
1
+ export default VitestReporter;
2
+ export type VitestTest = import("../../types/types.js").VitestTest;
3
+ export type VitestTestFile = import("../../types/types.js").VitestTestFile;
4
+ export type VitestSuite = import("../../types/types.js").VitestSuite;
5
+ export type VitestTestLogs = import("../../types/types.js").VitestTestLogs;
6
+ export type ErrorWithDiff = import("../../types/vitest.types.js").ErrorWithDiff;
7
+ export type STATUS = typeof import("../constants.js").STATUS;
8
+ export type TestData = import("../../types/types.js").TestData;
9
+ /**
10
+ * @typedef {import('../../types/types.js').VitestTest} VitestTest
11
+ * @typedef {import('../../types/types.js').VitestTestFile} VitestTestFile
12
+ * @typedef {import('../../types/types.js').VitestSuite} VitestSuite
13
+ * @typedef {import('../../types/types.js').VitestTestLogs} VitestTestLogs
14
+ * @typedef {import('../../types/vitest.types.js').ErrorWithDiff} ErrorWithDiff
15
+ * @typedef {typeof import('../constants.js').STATUS} STATUS
16
+ * @typedef {import('../../types/types.js').TestData} TestData
17
+ */
18
+ export class VitestReporter {
19
+ constructor(config?: {});
20
+ client: TestomatioClient;
21
+ /**
22
+ * @type {(TestData & {status: string})[]} tests
23
+ */
24
+ tests: (TestData & {
25
+ status: string;
26
+ })[];
27
+ onInit(): void;
28
+ /**
29
+ * @param {VitestTestFile[] | undefined} files // array with results;
30
+ * @param {unknown[] | undefined} errors // errors does not contain errors from tests; probably its testrunner errors
31
+ */
32
+ onFinished(files: VitestTestFile[] | undefined, errors: unknown[] | undefined): Promise<void>;
33
+ #private;
34
+ }
35
+ import { Client as TestomatioClient } from '../client.js';