@testomatio/reporter 2.9.3-beta-vitestmeta → 2.9.3-beta-vitestmeta-2

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.
@@ -49,6 +49,36 @@ function addStep(message, logs) {
49
49
  else
50
50
  index_js_1.services.logger.step(message, logs);
51
51
  }
52
+ /**
53
+ * Returns the currently running Vitest test task, so `meta()` (and similar
54
+ * functions) can attach data to it. The task `.meta` object is serialized by
55
+ * Vitest back to the reporter (works across all pools: threads, forks, vmThreads).
56
+ *
57
+ * Resolution order matters:
58
+ * 1. `globalThis.__vitest_worker__.current` — set by Vitest in every worker and
59
+ * independent of module resolution, so it works even when the reporter is the
60
+ * externalized package and `@vitest/runner` is deduped to a different instance
61
+ * (monorepos, pnpm, hoisting). This is also populated inside hooks (afterEach),
62
+ * pointing at the test that the hook belongs to.
63
+ * 2. `@vitest/runner` `getCurrentTest()` — fallback for setups/versions where the
64
+ * worker global is not exposed.
65
+ *
66
+ * @returns {any | null} Vitest test task or null when no test is active
67
+ */
68
+ function getCurrentVitestTest() {
69
+ // @ts-ignore - injected by Vitest into the worker global scope
70
+ const worker = globalThis.__vitest_worker__;
71
+ const current = worker?.current;
72
+ if (current && (current.type === 'test' || current.type === undefined))
73
+ return current;
74
+ try {
75
+ const test = requireModule('@vitest/runner').getCurrentTest?.();
76
+ if (test)
77
+ return test;
78
+ }
79
+ catch { }
80
+ return null;
81
+ }
52
82
  /**
53
83
  * Add key-value pair(s) to the test report
54
84
  * @param {{[key: string]: string} | string} keyValue - object { key: value } (multiple props allowed) OR key (string)
@@ -71,14 +101,11 @@ function setKeyValue(keyValue, value = undefined) {
71
101
  return;
72
102
  }
73
103
  if (process.env.VITEST || process.env.VITEST_WORKER_ID) {
74
- try {
75
- const vitestTest = requireModule('@vitest/runner').getCurrentTest?.();
76
- if (vitestTest) {
77
- Object.assign((vitestTest.meta ||= {}), keyValue);
78
- return;
79
- }
104
+ const vitestTest = getCurrentVitestTest();
105
+ if (vitestTest) {
106
+ Object.assign((vitestTest.meta ||= {}), keyValue);
107
+ return;
80
108
  }
81
- catch { }
82
109
  }
83
110
  // in this case keyValue is expected to be an object
84
111
  index_js_1.services.keyValues.put(keyValue);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testomatio/reporter",
3
- "version": "2.9.3-beta-vitestmeta",
3
+ "version": "2.9.3-beta-vitestmeta-2",
4
4
  "description": "Testomatio Reporter Client",
5
5
  "engines": {
6
6
  "node": ">=18"
@@ -47,6 +47,36 @@ function addStep(message, logs) {
47
47
  else services.logger.step(message, logs);
48
48
  }
49
49
 
50
+ /**
51
+ * Returns the currently running Vitest test task, so `meta()` (and similar
52
+ * functions) can attach data to it. The task `.meta` object is serialized by
53
+ * Vitest back to the reporter (works across all pools: threads, forks, vmThreads).
54
+ *
55
+ * Resolution order matters:
56
+ * 1. `globalThis.__vitest_worker__.current` — set by Vitest in every worker and
57
+ * independent of module resolution, so it works even when the reporter is the
58
+ * externalized package and `@vitest/runner` is deduped to a different instance
59
+ * (monorepos, pnpm, hoisting). This is also populated inside hooks (afterEach),
60
+ * pointing at the test that the hook belongs to.
61
+ * 2. `@vitest/runner` `getCurrentTest()` — fallback for setups/versions where the
62
+ * worker global is not exposed.
63
+ *
64
+ * @returns {any | null} Vitest test task or null when no test is active
65
+ */
66
+ function getCurrentVitestTest() {
67
+ // @ts-ignore - injected by Vitest into the worker global scope
68
+ const worker = globalThis.__vitest_worker__;
69
+ const current = worker?.current;
70
+ if (current && (current.type === 'test' || current.type === undefined)) return current;
71
+
72
+ try {
73
+ const test = requireModule('@vitest/runner').getCurrentTest?.();
74
+ if (test) return test;
75
+ } catch {}
76
+
77
+ return null;
78
+ }
79
+
50
80
  /**
51
81
  * Add key-value pair(s) to the test report
52
82
  * @param {{[key: string]: string} | string} keyValue - object { key: value } (multiple props allowed) OR key (string)
@@ -71,13 +101,11 @@ function setKeyValue(keyValue, value = undefined) {
71
101
  }
72
102
 
73
103
  if (process.env.VITEST || process.env.VITEST_WORKER_ID) {
74
- try {
75
- const vitestTest = requireModule('@vitest/runner').getCurrentTest?.();
76
- if (vitestTest) {
77
- Object.assign((vitestTest.meta ||= {}), keyValue);
78
- return;
79
- }
80
- } catch {}
104
+ const vitestTest = getCurrentVitestTest();
105
+ if (vitestTest) {
106
+ Object.assign((vitestTest.meta ||= {}), keyValue);
107
+ return;
108
+ }
81
109
  }
82
110
 
83
111
  // in this case keyValue is expected to be an object