@mirta/testing 0.3.5 → 0.4.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.
@@ -0,0 +1,71 @@
1
+ import nodePath from 'node:path';
2
+ import { defineConfig, configDefaults } from 'vitest/config';
3
+ import { resolveMonorepoContextAsync } from '@mirta/workspace';
4
+ import { loadEnv } from '@mirta/env-loader';
5
+
6
+ const cwd = process.cwd();
7
+ const { rootDir, packages } = await resolveMonorepoContextAsync(cwd);
8
+ /**
9
+ * Формирует конфигурации проектов Vitest для каждого пакета монорепозитория в соответствии с указанным режимом.
10
+ *
11
+ * @param mode - Режим окружения, передаваемый в загрузчик переменных окружения (`loadEnv`) для каждой конфигурации
12
+ * @returns Массив конфигураций `TestProjectConfiguration` для каждого пакета, или `undefined`, если пакетов нет
13
+ */
14
+ function getProjects(mode) {
15
+ if (packages.length === 0)
16
+ return;
17
+ return packages.map(pkg => ({
18
+ extends: true,
19
+ root: pkg.workspacePath,
20
+ test: {
21
+ env: loadEnv({
22
+ mode,
23
+ // Поиск только в пакете, чтобы не дублировать.
24
+ cwd: nodePath.join(rootDir, pkg.workspacePath),
25
+ }),
26
+ name: pkg.name,
27
+ typecheck: {
28
+ enabled: true,
29
+ },
30
+ },
31
+ }));
32
+ }
33
+ var index = defineConfig(({ mode }) => ({
34
+ define: {
35
+ __DEV__: true,
36
+ __TEST__: true,
37
+ },
38
+ resolve: {
39
+ // По умолчанию vite:import-analysis ищет точки входа
40
+ // пакетов в секции exports соответствующего файла package.json,
41
+ // однако тесты должны выполняться до сборки.
42
+ //
43
+ // Здесь осуществляется перенаправление на src/index.ts
44
+ alias: packages.reduce((items, nextItem) => {
45
+ items[nextItem.name] = nodePath.join(rootDir, nextItem.workspacePath, 'src', 'index.ts');
46
+ return items;
47
+ }, {}),
48
+ },
49
+ test: {
50
+ environment: 'node',
51
+ globals: true,
52
+ isolate: !!process.env.CI,
53
+ watch: false,
54
+ exclude: [
55
+ ...configDefaults.exclude,
56
+ '**/templates/**',
57
+ '**/dist/**',
58
+ ],
59
+ env: loadEnv({
60
+ mode,
61
+ cwd,
62
+ rootDir,
63
+ }),
64
+ setupFiles: [
65
+ '@mirta/testing/setup-global',
66
+ ],
67
+ projects: getProjects(mode),
68
+ },
69
+ }));
70
+
71
+ export { index as default };
@@ -0,0 +1,61 @@
1
+ import { vi } from 'vitest';
2
+ import { mock } from 'vitest-mock-extended';
3
+
4
+ /**
5
+ * @file Конфигурационный файл для настройки глобальных моков в тестах.
6
+ *
7
+ * Этот файл:
8
+ * - Выполняется перед каждым тестовым файлом через `setupFiles` в конфигурации Vitest;
9
+ * - Заменяет заглушками отсутствующие конструкции движка `wb-rules`;
10
+ *
11
+ * Позволяет:
12
+ * - Тестировать логику без реального оборудования;
13
+ *
14
+ * @see https://vitest.dev/config/#setupfiles
15
+ *
16
+ * @since 0.4.0
17
+ *
18
+ **/
19
+ /**
20
+ * Создаёт базовый логгер с моками методов журналирования.
21
+ * @returns Типизированный мок логгера с методами `info`, `debug`, `warning`, `error`.
22
+ *
23
+ **/
24
+ const createLogger = () => {
25
+ const logger = vi.fn();
26
+ logger.info = vi.fn();
27
+ logger.debug = vi.fn();
28
+ logger.warning = vi.fn();
29
+ logger.error = vi.fn();
30
+ return logger;
31
+ };
32
+ // Мок модуля NodeJs.
33
+ global.module = mock();
34
+ // Мок логгера для тестирования.
35
+ global.log = createLogger();
36
+ // Мок отладочного логирования (алиас для `log.debug`).
37
+ global.debug = vi.fn();
38
+ // Мок виртуального устройства.
39
+ global.dev = mock();
40
+ // Мок создания виртуальных устройств.
41
+ global.defineVirtualDevice = vi.fn();
42
+ // Мок получения устройства.
43
+ global.getDevice = vi.fn(() => mock({
44
+ getControl: () => mock(),
45
+ }));
46
+ // Мок получения контрола устройства.
47
+ global.getControl = vi.fn();
48
+ // Мок отслеживания MQTT-сообщений.
49
+ global.trackMqtt = vi.fn();
50
+ // Мок определения правил.
51
+ global.defineRule = vi.fn();
52
+ // Мок отключения правила.
53
+ global.disableRule = vi.fn();
54
+ // Мок включения правила.
55
+ global.enableRule = vi.fn();
56
+ // Мок запуска правила.
57
+ global.runRule = vi.fn();
58
+ // Мок сервиса уведомлений.
59
+ global.Notify = mock();
60
+ // Мок сервиса оповещения.
61
+ global.Alarms = mock();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mirta/testing",
3
3
  "description": "A unit-test runner equipped with built-in Wiren Board runtime emulation",
4
- "version": "0.3.5",
4
+ "version": "0.4.1",
5
5
  "license": "Unlicense",
6
6
  "keywords": [
7
7
  "mirta",
@@ -13,12 +13,19 @@
13
13
  "LICENSE",
14
14
  "README.md"
15
15
  ],
16
+ "types": "./dist/index.d.mts",
16
17
  "exports": {
17
18
  ".": {
18
19
  "import": {
19
20
  "types": "./dist/index.d.mts",
20
21
  "default": "./dist/index.mjs"
21
22
  }
23
+ },
24
+ "./config": {
25
+ "import": "./dist/config/index.mjs"
26
+ },
27
+ "./setup-global": {
28
+ "import": "./dist/setup/global.mjs"
22
29
  }
23
30
  },
24
31
  "homepage": "https://github.com/wb-mirta/core/tree/latest/packages/mirta-testing#readme",
@@ -32,10 +39,14 @@
32
39
  },
33
40
  "dependencies": {
34
41
  "vitest-mock-extended": "^3.1.0",
35
- "mirta": "0.3.5"
42
+ "@mirta/workspace": "0.4.1",
43
+ "@mirta/env-loader": "0.4.1",
44
+ "mirta": "0.4.1"
45
+ },
46
+ "devDependencies": {
47
+ "@mirta/rollup": "0.4.1"
36
48
  },
37
49
  "scripts": {
38
- "clean": "rimraf dist",
39
- "build:mono": "pnpm clean && rollup -c node:@mirta/rollup/config --config-package"
50
+ "build:mono": "rollup -c"
40
51
  }
41
52
  }