@7n/test 0.14.3 → 0.14.5

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
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.14.5] - 2026-07-12
4
+
5
+ ### Fixed
6
+
7
+ - runBunCoverage: --parallel для ізоляції test-файлів
8
+
9
+ ## [0.14.4] - 2026-07-11
10
+
11
+ ### Fixed
12
+
13
+ - `measureCoveragePerFile`: не додавати `--coverage.exclude=**/*.d.ts` на CLI, коли target-проєкт має власний локальний vitest + `vitest.config.js` — CLI-флаг повністю замінює (не мерджить) масив `test.coverage.exclude` із конфіга проєкту, через що тихо затирались власні винятки (напр. bun-native-тести, що можуть виконуватись лише під `bun test`) і колектор помилково бачив уже покриті файли як 0%, намагаючись згенерувати для них нові тести. У bundled/shim-режимі (без локального vitest) флаг лишається — там немає стороннього конфіга для затирання.
14
+
3
15
  ## [0.14.3] - 2026-07-11
4
16
 
5
17
  ### Changed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@7n/test",
3
- "version": "0.14.3",
3
+ "version": "0.14.5",
4
4
  "description": "CLI-утиліта @7n/test",
5
5
  "keywords": [
6
6
  "7n",
@@ -286,11 +286,19 @@ const defaultRunner = {
286
286
  // Bun-native workspace (prod-код імпортує `bun`/`bun:*`): vitest такий модуль не
287
287
  // резолвить, тож coverage ганяємо нативним `bun test`. Bun ремапить
288
288
  // `import ... from 'vitest'` у тест-файлах на `bun:test` — тести лишаються canon.
289
- const r = spawnSync('bun', ['test', '--coverage', '--coverage-reporter=lcov', `--coverage-dir=${lcovDir}`], {
290
- cwd,
291
- stdio: 'inherit',
292
- env: process.env
293
- })
289
+ // `--parallel` форкає worker-процес на тестовий файл (ізоляція module-registry):
290
+ // без нього всі файли ділять один process, і leftover mock-стан
291
+ // (`mockResolvedValueOnce`, module-level кеш) з одного файлу протікає в наступний,
292
+ // даючи фантомні падіння. lcov з `--coverage-dir` агрегується коректно з усіх worker-ів.
293
+ const r = spawnSync(
294
+ 'bun',
295
+ ['test', '--coverage', '--coverage-reporter=lcov', `--coverage-dir=${lcovDir}`, '--parallel'],
296
+ {
297
+ cwd,
298
+ stdio: 'inherit',
299
+ env: process.env
300
+ }
301
+ )
294
302
  return r.status ?? 1
295
303
  },
296
304
  runStryker({ cwd, mutate }) {
@@ -98,6 +98,22 @@ export async function measureCoveragePerFile(dir) {
98
98
  const jsonResultsFile = join(lcovDir, 'test-results.json')
99
99
 
100
100
  const { bin, configArgs } = resolveVitestRun(dir)
101
+ // `--coverage.exclude` на CLI ПОВНІСТЮ замінює (не мерджить) масив
102
+ // `test.coverage.exclude` із target-проєкту vitest.config.js — так влаштований
103
+ // vitest CLI-override для array-полів. Коли `configArgs` порожній, resolveVitestRun
104
+ // вже обрав ЛОКАЛЬНИЙ vitest target-проєкту (він сам підхопить свій vitest.config.js) —
105
+ // додавання CLI-флагу тут тихо затирає власні винятки проєкту (напр. тести, що
106
+ // структурно можуть виконуватись лише під `bun test`, а не vitest), через що колектор
107
+ // бачить їх як 0%-покриті й намагається згенерувати для них НОВІ тести, хоча вони вже
108
+ // покриті. У bundled/shim-режимі (`configArgs` непорожній) конфлікту немає — стороннього
109
+ // конфіга для затирання нема, а shim (`ensureVitestShim`) вже сам включає `**/*.d.ts`.
110
+ const coverageExcludeArgs =
111
+ configArgs.length === 0
112
+ ? []
113
+ : [
114
+ // vitest 4 прибрав дефолтний exclude **/*.d.ts — без нього v8-remap падає на TS-синтаксисі декларацій
115
+ '--coverage.exclude=**/*.d.ts'
116
+ ]
101
117
  try {
102
118
  spawnSync(
103
119
  process.execPath,
@@ -112,8 +128,7 @@ export async function measureCoveragePerFile(dir) {
112
128
  '--coverage.reporter=lcov',
113
129
  // vitest 4 прибрав coverage.all — явний include, щоб файли без тестів лишались у lcov (0%)
114
130
  '--coverage.include=**/*.{js,mjs,ts,vue}',
115
- // vitest 4 прибрав дефолтний exclude **/*.d.ts — без нього v8-remap падає на TS-синтаксисі декларацій
116
- '--coverage.exclude=**/*.d.ts',
131
+ ...coverageExcludeArgs,
117
132
  `--coverage.reportsDirectory=${lcovDir}`,
118
133
  '--reporter=verbose',
119
134
  '--reporter=json',
@@ -3,7 +3,7 @@ type: JS Module
3
3
  title: coverage-per-file.mjs
4
4
  resource: npm/src/coverage-per-file.mjs
5
5
  docgen:
6
- crc: 2b4a460d
6
+ crc: 388282cc
7
7
  model: omlx/gemma-4-e4b-it-OptiQ-4bit
8
8
  score: 100
9
9
  issues: judge:inaccurate:0.98