@application-kit/testing 0.8.0 → 0.9.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
@@ -1,5 +1,11 @@
1
1
  # @application-kit/testing
2
2
 
3
+ ## 0.9.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 94062e4: `defineApplicationUnitConfig` принимает `serverSetupFiles` — setup-файлы только проекта `server`. Туда идёт `/vitest/fast-bcrypt`: в `setupFiles` проект `client` при `node_modules` вне корня падал на `Cannot find module '/@fs/…'`.
8
+
3
9
  ## 0.8.0
4
10
 
5
11
  ### Minor Changes
package/README.md CHANGED
@@ -65,7 +65,8 @@ export default defineApplicationUnitConfig({
65
65
  coverage: { exclude: ['**/*.module.ts'], include: ['src'], thresholds: { lines: 95 } },
66
66
  excludeSpecs: E2E_SPECS,
67
67
  root: import.meta.dirname,
68
- setupFiles: ['@application-kit/testing/vitest/fast-bcrypt'],
68
+ serverSetupFiles: ['@application-kit/testing/vitest/fast-bcrypt'],
69
+ setupFiles: [],
69
70
  specs: ['src/**/*.spec.ts'],
70
71
  viteConfig,
71
72
  })
@@ -80,7 +81,8 @@ export default defineApplicationEndToEndConfig({
80
81
  })
81
82
  ```
82
83
 
83
- Спеки, исходники клиента, покрытие (глобы, исключения, пороги), `setupFiles` и дополнительные пакеты для
84
+ Спеки, исходники клиента, покрытие (глобы, исключения, пороги), `setupFiles` (`serverSetupFiles` — только проекту
85
+ `server`) и дополнительные пакеты для
84
86
  `server.deps.inline` (`inlineDependencies`) — у приложения. Фабрики решают сами:
85
87
 
86
88
  - оба профиля — `globals`, `isolate: false`, `testTimeout` 20 с (таймаут ловит зависший промис, а не медленный раннер),
@@ -99,13 +101,18 @@ export default defineApplicationEndToEndConfig({
99
101
 
100
102
  ## Вход `/vitest/fast-bcrypt`: дешёвый bcrypt
101
103
 
102
- Setup-файл unit-профиля (`setupFiles: ['@application-kit/testing/vitest/fast-bcrypt']`): `vi.mock('bcrypt')` считает хеш
104
+ Setup-файл unit-профиля (`serverSetupFiles: ['@application-kit/testing/vitest/fast-bcrypt']`): `vi.mock('bcrypt')` считает хеш
103
105
  с cost 4 (≈ 1 мс против ≈ 300 мс у cost 12), а поле стоимости в строке переписывает на запрошенную — `getRounds` и
104
106
  решение о перехешировании видят настоящую стоимость; `compare` перед сверкой возвращает поле на 4. Сверяются только хеши,
105
107
  выпущенные подменой: литерал хеша с настоящим cost 12 не сойдётся. Подмена видна коду, прошедшему трансформ vitest
106
108
  (исходники приложения); внешний пакет, импортирующий `bcrypt`, ускоряется только через `inlineDependencies`. E2e-профилю
107
109
  файл не нужен.
108
110
 
111
+ Файл идёт в `serverSetupFiles`, а не в `setupFiles`: клиентскому коду bcrypt не нужен, а проект `client` грузит setup-файлы
112
+ через vite-сервер, который отдаёт только файлы из `server.fs.allow` (по умолчанию — корень проекта). При `node_modules` вне
113
+ корня (образ CI, git worktree со ссылкой на чужой `node_modules`) файл пакета в `setupFiles` роняет все спеки `client` на
114
+ `Cannot find module '/@fs/…'`.
115
+
109
116
  ## Ячейки CI по проектам
110
117
 
111
118
  `vitest --shard=i/n` сам режет спеки хешем, и при двух проектах разных трансформов (`server` в `node`, `client` в
@@ -12,6 +12,7 @@ export interface ApplicationUnitConfigOptionsInterface extends ApplicationTestCo
12
12
  clientSources: readonly string[];
13
13
  clientSpecs: readonly string[];
14
14
  excludeSpecs: readonly string[];
15
+ serverSetupFiles?: readonly string[];
15
16
  }
16
17
  export interface CoverageScopeInterface {
17
18
  exclude?: readonly string[];
@@ -51,6 +51,7 @@ const serverProject = (options) => ({
51
51
  exclude: [...options.excludeSpecs, ...options.clientSpecs],
52
52
  include: [...options.specs],
53
53
  name: 'server',
54
+ setupFiles: [...(options.serverSetupFiles ?? [])],
54
55
  },
55
56
  });
56
57
  const clientProject = (options) => ({
@@ -12,6 +12,7 @@ export interface ApplicationUnitConfigOptionsInterface extends ApplicationTestCo
12
12
  clientSources: readonly string[];
13
13
  clientSpecs: readonly string[];
14
14
  excludeSpecs: readonly string[];
15
+ serverSetupFiles?: readonly string[];
15
16
  }
16
17
  export interface CoverageScopeInterface {
17
18
  exclude?: readonly string[];
@@ -45,6 +45,7 @@ const serverProject = (options) => ({
45
45
  exclude: [...options.excludeSpecs, ...options.clientSpecs],
46
46
  include: [...options.specs],
47
47
  name: 'server',
48
+ setupFiles: [...(options.serverSetupFiles ?? [])],
48
49
  },
49
50
  });
50
51
  const clientProject = (options) => ({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@application-kit/testing",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Тестовая инфраструктура NestJS-приложений: шины CQRS, логгер, фейковый microservice, сборка web-приложения, Postgres в testcontainers, запуск e2e-приложения, изоляция окружения прогона, дешёвый bcrypt для unit-прогона, раскладка ячеек CI по проектам vitest и фабрики конфигов vitest",
5
5
  "keywords": [
6
6
  "cqrs",