@deot/dev-tester 1.1.1 → 2.0.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/README.md CHANGED
@@ -4,8 +4,157 @@
4
4
 
5
5
  - 优先执行`scripts`下的`test`
6
6
 
7
+ ## 自定义配置
8
+
9
+ 提供环境变量`TEST_OPTIONS`
10
+
11
+ ```ts
12
+ interface TEST_OPTIONS {
13
+ packageFolderName?: string;
14
+ workspace?: string;
15
+ watch: boolean;
16
+ coverage: boolean;
17
+ }
18
+ ```
19
+
20
+ 根目录创建`test.config.ts`, 可以选择`configShared`合并或单独基于`TEST_OPTIONS`配置
21
+ > 也可以是`z.test.config.ts`, 前缀主要是置底
22
+
23
+ ```ts
24
+ import { mergeConfig, defineConfig } from 'vitest/config';
25
+ import configShared from '@deot/dev-tester/shared.config';
26
+
27
+ export default mergeConfig(
28
+ configShared,
29
+ defineConfig({
30
+ test: {
31
+ coverage: {
32
+ provider: 'istanbul',
33
+ exclude: [
34
+ `packages/cli/src/**/*.ts`,
35
+ `packages/*er/src/**/*.ts`
36
+ ]
37
+ }
38
+ }
39
+ })
40
+ );
41
+ ```
42
+ 取`test.config.ts`, 是为了方便从`vitest`转其他测试工具时,可以不改变文件名
7
43
 
8
44
  ## 其它
9
45
 
10
- - 目前依赖`jest`,后续考虑读取`jest.config.js`
11
- - 如改用`vitest`,后续考虑读取`vitest.config.js`
46
+ - 已从`jest` -> `vitest`
47
+
48
+ ## 测试日志
49
+
50
+ #### Jest(29.5.0)
51
+
52
+ > MacBook Pro (15-inch, 2016) - i7-6820HQ & 16GB
53
+
54
+ ```shell
55
+ ➜ dev git:(main) ✗ npm run test -- --package-name '*'
56
+
57
+ > test
58
+ > tsx ./packages/cli/src/index.ts test --package-name *
59
+
60
+ PASS packages/shared/__tests__/locals.spec.ts (10.698 s)
61
+
62
+ PASS packages/shared/__tests__/shell.spec.ts (10.732 s)
63
+ PASS packages/test/__tests__/command.spec.ts (16.028 s)
64
+ PASS packages/cli/__tests__/test.spec.ts (25.399 s)
65
+ PASS packages/releaser/__tests__/index.spec.ts (25.624 s)
66
+ PASS packages/cli/__tests__/build.spec.ts (37.999 s)
67
+ PASS packages/cli/__tests__/add.spec.ts (39.3 s)
68
+ PASS packages/shared/__tests__/utils.spec.ts
69
+ PASS packages/stylelint/__tests__/index.spec.ts (18.35 s)
70
+ PASS packages/cli/__tests__/release.spec.ts (19.994 s)
71
+ PASS packages/cli/__tests__/link.spec.ts (14.567 s)
72
+ PASS packages/cli/__tests__/dev.spec.ts (15.482 s)
73
+ PASS packages/linker/__tests__/index.spec.ts
74
+ PASS packages/dever/__tests__/index.spec.ts
75
+ PASS packages/tester/__tests__/index.spec.ts (69.246 s)
76
+ PASS packages/shared/__tests__/global.spec.ts
77
+ PASS packages/adder/__tests__/index.spec.ts (5.537 s)
78
+ PASS packages/cli/__tests__/singlerepo.spec.ts (74.416 s)
79
+ PASS packages/cli/__tests__/monorepo.spec.ts (81.316 s)
80
+ PASS packages/eslint/__tests__/index.spec.ts (81.453 s)
81
+ PASS packages/index/__tests__/index.spec.ts (46.985 s)
82
+ PASS packages/builder/__tests__/index.spec.ts (132.796 s)
83
+ -------------|---------|----------|---------|---------|-------------------
84
+ File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
85
+ -------------|---------|----------|---------|---------|-------------------
86
+ All files | 100 | 100 | 100 | 100 |
87
+ index/src | 100 | 100 | 100 | 100 |
88
+ index.ts | 100 | 100 | 100 | 100 |
89
+ shared/src | 100 | 100 | 100 | 100 |
90
+ index.ts | 100 | 100 | 100 | 100 |
91
+ locals.ts | 100 | 100 | 100 | 100 |
92
+ logger.ts | 100 | 100 | 100 | 100 |
93
+ shell.ts | 100 | 100 | 100 | 100 |
94
+ utils.ts | 100 | 100 | 100 | 100 |
95
+ test/src | 100 | 100 | 100 | 100 |
96
+ command.ts | 100 | 100 | 100 | 100 |
97
+ index.ts | 100 | 100 | 100 | 100 |
98
+ -------------|---------|----------|---------|---------|-------------------
99
+
100
+ Test Suites: 22 passed, 22 total
101
+ Tests: 50 passed, 50 total
102
+ Snapshots: 0 total
103
+ Time: 147.764 s
104
+ Ran all test suites.
105
+ ```
106
+
107
+ #### Vitest(0.32.0)
108
+ ```
109
+ ➜ dev git:(main) ✗ npm run test -- --package-name '*'
110
+
111
+ > test
112
+ > tsx ./packages/cli/src/index.ts test --package-name *
113
+
114
+
115
+ RUN v0.32.0 /Users/deot/Desktop/workspace/dev
116
+ Coverage enabled with istanbul
117
+
118
+ · packages/test/__tests__/command.spec.ts (3)
119
+ ✓ packages/test/__tests__/command.spec.ts (3) 5011ms
120
+ ✓ packages/cli/__tests__/add.spec.ts (2) 32338ms
121
+ ✓ packages/shared/__tests__/locals.spec.ts (3)
122
+ ✓ packages/shared/__tests__/shell.spec.ts (5)
123
+ ✓ packages/cli/__tests__/build.spec.ts (2) 30757ms
124
+ ✓ packages/cli/__tests__/test.spec.ts (1) 14478ms
125
+ ✓ packages/releaser/__tests__/index.spec.ts (2) 4553ms
126
+ ✓ packages/tester/__tests__/index.spec.ts (4) 42230ms
127
+ ✓ packages/builder/__tests__/index.spec.ts (4) 65721ms
128
+ ✓ packages/cli/__tests__/singlerepo.spec.ts (3) 61712ms
129
+ ✓ packages/cli/__tests__/monorepo.spec.ts (3) 66319ms
130
+ ✓ packages/eslint/__tests__/index.spec.ts (2) 1487ms
131
+ ✓ packages/stylelint/__tests__/index.spec.ts (2) 1192ms
132
+ ✓ packages/shared/__tests__/utils.spec.ts (3)
133
+ ✓ packages/cli/__tests__/release.spec.ts (1) 16392ms
134
+ ✓ packages/cli/__tests__/link.spec.ts (1) 13863ms
135
+ ✓ packages/cli/__tests__/dev.spec.ts (1) 12761ms
136
+ ✓ packages/index/__tests__/index.spec.ts (1)
137
+ ✓ packages/linker/__tests__/index.spec.ts (2)
138
+ ✓ packages/adder/__tests__/index.spec.ts (2)
139
+ ✓ packages/dever/__tests__/index.spec.ts (2)
140
+ ✓ packages/shared/__tests__/global.spec.ts (1)
141
+
142
+ Test Files 22 passed (22)
143
+ Tests 50 passed (50)
144
+ Start at 10:47:12
145
+ Duration 74.17s (transform 520ms, setup 2ms, collect 18.69s, tests 368.93s, environment 6ms, prepare 5.60s)
146
+
147
+ % Coverage report from istanbul
148
+ -------------|---------|----------|---------|---------|-------------------
149
+ File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
150
+ -------------|---------|----------|---------|---------|-------------------
151
+ All files | 98.93 | 95.12 | 100 | 100 |
152
+ shared/src | 98.56 | 94.2 | 100 | 100 |
153
+ locals.ts | 97.59 | 95.23 | 100 | 100 | 72,104
154
+ logger.ts | 100 | 100 | 100 | 100 |
155
+ shell.ts | 100 | 85.71 | 100 | 100 | 9-16
156
+ utils.ts | 100 | 100 | 100 | 100 |
157
+ test/src | 100 | 100 | 100 | 100 |
158
+ command.ts | 100 | 100 | 100 | 100 |
159
+ -------------|---------|----------|---------|---------|-------------------
160
+ ```
package/dist/index.cjs.js CHANGED
@@ -1,101 +1,147 @@
1
1
  'use strict';
2
2
 
3
- var devShared = require('@deot/dev-shared');
4
- var inquirer = require('inquirer');
5
- var autocomplete = require('inquirer-autocomplete-prompt');
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
6
4
 
7
- const ALL_PACKAGE = 'All Packages';
5
+ const path = require('node:path');
6
+ const node_url = require('node:url');
7
+ const devShared = require('@deot/dev-shared');
8
+ const node = require('vitest/node');
9
+ const fs = require('fs-extra');
10
+ const inquirer = require('inquirer');
11
+ const autocomplete = require('inquirer-autocomplete-prompt');
12
+
13
+ function _interopNamespaceDefault(e) {
14
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: 'Module' } });
15
+ if (e) {
16
+ for (const k in e) {
17
+ if (k !== 'default') {
18
+ const d = Object.getOwnPropertyDescriptor(e, k);
19
+ Object.defineProperty(n, k, d.get ? d : {
20
+ enumerable: true,
21
+ get: () => e[k]
22
+ });
23
+ }
24
+ }
25
+ }
26
+ n.default = e;
27
+ return Object.freeze(n);
28
+ }
29
+
30
+ const path__namespace = /*#__PURE__*/_interopNamespaceDefault(path);
31
+
32
+ const ALL_PACKAGE = "All Packages";
8
33
  const { prompt, registerPrompt } = inquirer;
9
34
  const getOptions = async () => {
10
- const isDev = process.env.NODE_ENV === 'development';
11
- const { packageFolderNames } = devShared.Locals.impl();
12
- const packages$ = [ALL_PACKAGE, ...packageFolderNames];
13
- const question = [
14
- {
15
- type: 'autocomplete',
16
- message: `Select Package To ${isDev ? 'Develop' : 'Test'}:`,
17
- name: 'packageFolderName',
18
- default: 'cli',
19
- source: (_, input) => {
20
- input = input || '';
21
- return new Promise(($resolve => {
22
- let filter = input
23
- ? packages$.filter(item => item.includes(input))
24
- : packages$;
25
- $resolve(filter);
26
- }));
27
- }
28
- },
29
- {
30
- type: 'confirm',
31
- message: 'Watch Mode?',
32
- name: 'watch',
33
- when: () => !isDev,
34
- default: (answers) => {
35
- return answers.packageFolderName !== ALL_PACKAGE;
36
- }
37
- }
38
- ];
39
- registerPrompt('autocomplete', autocomplete);
40
- let result = await prompt(question);
41
- result.packageFolderName = result.packageFolderName == ALL_PACKAGE
42
- ? undefined
43
- : result.packageFolderName;
44
- result.watch = result.watch || isDev;
45
- return result;
35
+ const isDev = process.env.NODE_ENV === "development";
36
+ const { packageFolderNames } = devShared.Locals.impl();
37
+ const packages$ = [ALL_PACKAGE, ...packageFolderNames];
38
+ const question = [
39
+ {
40
+ type: "autocomplete",
41
+ message: `Select Package To ${isDev ? "Develop" : "Test"}:`,
42
+ name: "packageFolderName",
43
+ default: "cli",
44
+ source: (_, input) => {
45
+ input = input || "";
46
+ return new Promise(($resolve) => {
47
+ let filter = input ? packages$.filter((item) => item.includes(input)) : packages$;
48
+ $resolve(filter);
49
+ });
50
+ }
51
+ },
52
+ {
53
+ type: "confirm",
54
+ message: "Watch Mode?",
55
+ name: "watch",
56
+ when: () => !isDev,
57
+ default: (answers) => {
58
+ return answers.packageFolderName !== ALL_PACKAGE;
59
+ }
60
+ },
61
+ {
62
+ type: "confirm",
63
+ message: "Coverage Analyze?",
64
+ name: "coverage",
65
+ default: true
66
+ }
67
+ ];
68
+ registerPrompt("autocomplete", autocomplete);
69
+ let result = await prompt(question);
70
+ result.packageFolderName = result.packageFolderName == ALL_PACKAGE ? void 0 : result.packageFolderName;
71
+ result.watch = result.watch || isDev;
72
+ return result;
46
73
  };
47
74
 
75
+ const dirname = path__namespace.dirname(node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (document.currentScript && document.currentScript.src || new URL('index.cjs.js', document.baseURI).href))));
48
76
  const run = (options) => devShared.Utils.autoCatch(async () => {
49
- options = { ...options };
50
- const locals = devShared.Locals.impl();
51
- if (typeof options.dryRun === 'undefined') {
52
- options.dryRun = process.env.NODE_ENV === 'UNIT';
53
- }
54
- if (locals.workspace && !options.packageName) {
55
- const promptOptions = await getOptions();
56
- options = {
57
- ...options,
58
- ...promptOptions
59
- };
60
- }
61
- const { cwd, workspace, packageOptionsMap, packageDirsMap } = locals;
62
- const { packageName, watch, dryRun } = options;
63
- options.packageFolderName = devShared.Locals.getPackageFolderName(options.packageName) || options.packageFolderName;
64
- options.workspace = workspace;
65
- const packageOptions = packageOptionsMap[options.packageFolderName];
66
- const packageDir = packageDirsMap[options.packageFolderName];
67
- if (workspace
68
- && cwd !== packageDir
69
- && packageOptions?.scripts?.['test']) {
70
- await devShared.Shell.spawn(`npm`, ['run', 'test']);
71
- return;
72
- }
73
- if (!options.packageFolderName)
74
- delete options.packageFolderName;
75
- if (!options.workspace)
76
- delete options.workspace;
77
- delete options.packageName;
78
- const command = `cross-env NODE_ENV=${process.env.NODE_ENV || 'TEST'} TEST_OPTIONS=${encodeURIComponent(JSON.stringify(options))} jest `
79
- + ([
80
- '--passWithNoTests',
81
- `${watch ? '--watchAll' : ''}`
82
- ].join(' '));
83
- if (dryRun)
84
- return devShared.Shell.spawn(`echo ${command}`);
85
- await devShared.Shell.spawn(command);
86
- if (!watch)
87
- return;
88
- devShared.Logger.log(packageName || '', '测试已通过');
77
+ options = { ...options };
78
+ const locals = devShared.Locals.impl();
79
+ if (typeof options.dryRun === "undefined") {
80
+ options.dryRun = process.env.NODE_ENV === "UNIT";
81
+ }
82
+ if (locals.workspace && !options.packageName) {
83
+ const promptOptions = await getOptions();
84
+ options = {
85
+ ...options,
86
+ ...promptOptions
87
+ };
88
+ }
89
+ const { cwd, workspace, packageOptionsMap, packageDirsMap } = locals;
90
+ const { coverage, packageName, watch, dryRun } = options;
91
+ options.packageFolderName = devShared.Locals.getPackageFolderName(options.packageName) || options.packageFolderName;
92
+ options.workspace = workspace;
93
+ const packageOptions = packageOptionsMap[options.packageFolderName];
94
+ const packageDir = packageDirsMap[options.packageFolderName];
95
+ if (workspace && cwd !== packageDir && packageOptions?.scripts?.["test"]) {
96
+ await devShared.Shell.spawn(`npm`, ["run", "test"], { cwd: packageDir });
97
+ return;
98
+ }
99
+ if (!options.packageFolderName)
100
+ delete options.packageFolderName;
101
+ if (!options.workspace)
102
+ delete options.workspace;
103
+ delete options.packageName;
104
+ const isDev = process.env.NODE_ENV === "development";
105
+ const NODE_ENV = process.env.NODE_ENV || "TEST";
106
+ const TEST_OPTIONS = encodeURIComponent(JSON.stringify(options));
107
+ if (dryRun) {
108
+ const command = `cross-env NODE_ENV=${NODE_ENV} TEST_OPTIONS=${TEST_OPTIONS} vitest ` + [
109
+ "--passWithNoTests",
110
+ `${!(watch || isDev) ? "--watch=false" : ""}`
111
+ ].join(" ");
112
+ devShared.Shell.spawn(`echo ${command}`);
113
+ return;
114
+ }
115
+ process.env.NODE_ENV = process.env.NODE_ENV || "TEST";
116
+ process.env.TEST_OPTIONS = TEST_OPTIONS;
117
+ let options$ = {
118
+ coverage: {
119
+ enabled: !!coverage
120
+ },
121
+ passWithNoTests: true,
122
+ watch: !!(watch || isDev)
123
+ };
124
+ if (fs.existsSync(`${cwd}/test.config.ts`)) {
125
+ options$.config = path__namespace.relative(cwd, path__namespace.resolve(cwd, "./test.config.ts"));
126
+ } else if (fs.existsSync(`${cwd}/z.test.config.ts`)) {
127
+ options$.config = path__namespace.relative(cwd, path__namespace.resolve(cwd, "./z.test.config.ts"));
128
+ } else {
129
+ options$.config = path__namespace.relative(cwd, path__namespace.resolve(dirname, "../shared.config.ts"));
130
+ }
131
+ const vitest = await node.createVitest("test", options$);
132
+ await vitest.start();
133
+ if (!watch)
134
+ return;
135
+ devShared.Logger.log(packageName || "", "测试已通过");
89
136
  }, {
90
- onError: (e) => {
91
- if (typeof e === 'number' && e === 1) {
92
- devShared.Logger.error('测试未通过');
93
- }
94
- else {
95
- devShared.Logger.error(e);
96
- }
97
- process.exit(1);
137
+ onError: (e) => {
138
+ if (typeof e === "number" && e === 1) {
139
+ devShared.Logger.error("测试未通过");
140
+ } else {
141
+ devShared.Logger.error(e);
98
142
  }
143
+ process.exit(1);
144
+ }
99
145
  });
100
146
 
101
147
  exports.run = run;
package/dist/index.es.js CHANGED
@@ -1,99 +1,124 @@
1
+ import * as path from 'node:path';
2
+ import { fileURLToPath } from 'node:url';
1
3
  import { Locals, Utils, Shell, Logger } from '@deot/dev-shared';
4
+ import { createVitest } from 'vitest/node';
5
+ import fs from 'fs-extra';
2
6
  import inquirer from 'inquirer';
3
7
  import autocomplete from 'inquirer-autocomplete-prompt';
4
8
 
5
- const ALL_PACKAGE = 'All Packages';
9
+ const ALL_PACKAGE = "All Packages";
6
10
  const { prompt, registerPrompt } = inquirer;
7
11
  const getOptions = async () => {
8
- const isDev = process.env.NODE_ENV === 'development';
9
- const { packageFolderNames } = Locals.impl();
10
- const packages$ = [ALL_PACKAGE, ...packageFolderNames];
11
- const question = [
12
- {
13
- type: 'autocomplete',
14
- message: `Select Package To ${isDev ? 'Develop' : 'Test'}:`,
15
- name: 'packageFolderName',
16
- default: 'cli',
17
- source: (_, input) => {
18
- input = input || '';
19
- return new Promise(($resolve => {
20
- let filter = input
21
- ? packages$.filter(item => item.includes(input))
22
- : packages$;
23
- $resolve(filter);
24
- }));
25
- }
26
- },
27
- {
28
- type: 'confirm',
29
- message: 'Watch Mode?',
30
- name: 'watch',
31
- when: () => !isDev,
32
- default: (answers) => {
33
- return answers.packageFolderName !== ALL_PACKAGE;
34
- }
35
- }
36
- ];
37
- registerPrompt('autocomplete', autocomplete);
38
- let result = await prompt(question);
39
- result.packageFolderName = result.packageFolderName == ALL_PACKAGE
40
- ? undefined
41
- : result.packageFolderName;
42
- result.watch = result.watch || isDev;
43
- return result;
12
+ const isDev = process.env.NODE_ENV === "development";
13
+ const { packageFolderNames } = Locals.impl();
14
+ const packages$ = [ALL_PACKAGE, ...packageFolderNames];
15
+ const question = [
16
+ {
17
+ type: "autocomplete",
18
+ message: `Select Package To ${isDev ? "Develop" : "Test"}:`,
19
+ name: "packageFolderName",
20
+ default: "cli",
21
+ source: (_, input) => {
22
+ input = input || "";
23
+ return new Promise(($resolve) => {
24
+ let filter = input ? packages$.filter((item) => item.includes(input)) : packages$;
25
+ $resolve(filter);
26
+ });
27
+ }
28
+ },
29
+ {
30
+ type: "confirm",
31
+ message: "Watch Mode?",
32
+ name: "watch",
33
+ when: () => !isDev,
34
+ default: (answers) => {
35
+ return answers.packageFolderName !== ALL_PACKAGE;
36
+ }
37
+ },
38
+ {
39
+ type: "confirm",
40
+ message: "Coverage Analyze?",
41
+ name: "coverage",
42
+ default: true
43
+ }
44
+ ];
45
+ registerPrompt("autocomplete", autocomplete);
46
+ let result = await prompt(question);
47
+ result.packageFolderName = result.packageFolderName == ALL_PACKAGE ? void 0 : result.packageFolderName;
48
+ result.watch = result.watch || isDev;
49
+ return result;
44
50
  };
45
51
 
52
+ const dirname = path.dirname(fileURLToPath(import.meta.url));
46
53
  const run = (options) => Utils.autoCatch(async () => {
47
- options = { ...options };
48
- const locals = Locals.impl();
49
- if (typeof options.dryRun === 'undefined') {
50
- options.dryRun = process.env.NODE_ENV === 'UNIT';
51
- }
52
- if (locals.workspace && !options.packageName) {
53
- const promptOptions = await getOptions();
54
- options = {
55
- ...options,
56
- ...promptOptions
57
- };
58
- }
59
- const { cwd, workspace, packageOptionsMap, packageDirsMap } = locals;
60
- const { packageName, watch, dryRun } = options;
61
- options.packageFolderName = Locals.getPackageFolderName(options.packageName) || options.packageFolderName;
62
- options.workspace = workspace;
63
- const packageOptions = packageOptionsMap[options.packageFolderName];
64
- const packageDir = packageDirsMap[options.packageFolderName];
65
- if (workspace
66
- && cwd !== packageDir
67
- && packageOptions?.scripts?.['test']) {
68
- await Shell.spawn(`npm`, ['run', 'test']);
69
- return;
70
- }
71
- if (!options.packageFolderName)
72
- delete options.packageFolderName;
73
- if (!options.workspace)
74
- delete options.workspace;
75
- delete options.packageName;
76
- const command = `cross-env NODE_ENV=${process.env.NODE_ENV || 'TEST'} TEST_OPTIONS=${encodeURIComponent(JSON.stringify(options))} jest `
77
- + ([
78
- '--passWithNoTests',
79
- `${watch ? '--watchAll' : ''}`
80
- ].join(' '));
81
- if (dryRun)
82
- return Shell.spawn(`echo ${command}`);
83
- await Shell.spawn(command);
84
- if (!watch)
85
- return;
86
- Logger.log(packageName || '', '测试已通过');
54
+ options = { ...options };
55
+ const locals = Locals.impl();
56
+ if (typeof options.dryRun === "undefined") {
57
+ options.dryRun = process.env.NODE_ENV === "UNIT";
58
+ }
59
+ if (locals.workspace && !options.packageName) {
60
+ const promptOptions = await getOptions();
61
+ options = {
62
+ ...options,
63
+ ...promptOptions
64
+ };
65
+ }
66
+ const { cwd, workspace, packageOptionsMap, packageDirsMap } = locals;
67
+ const { coverage, packageName, watch, dryRun } = options;
68
+ options.packageFolderName = Locals.getPackageFolderName(options.packageName) || options.packageFolderName;
69
+ options.workspace = workspace;
70
+ const packageOptions = packageOptionsMap[options.packageFolderName];
71
+ const packageDir = packageDirsMap[options.packageFolderName];
72
+ if (workspace && cwd !== packageDir && packageOptions?.scripts?.["test"]) {
73
+ await Shell.spawn(`npm`, ["run", "test"], { cwd: packageDir });
74
+ return;
75
+ }
76
+ if (!options.packageFolderName)
77
+ delete options.packageFolderName;
78
+ if (!options.workspace)
79
+ delete options.workspace;
80
+ delete options.packageName;
81
+ const isDev = process.env.NODE_ENV === "development";
82
+ const NODE_ENV = process.env.NODE_ENV || "TEST";
83
+ const TEST_OPTIONS = encodeURIComponent(JSON.stringify(options));
84
+ if (dryRun) {
85
+ const command = `cross-env NODE_ENV=${NODE_ENV} TEST_OPTIONS=${TEST_OPTIONS} vitest ` + [
86
+ "--passWithNoTests",
87
+ `${!(watch || isDev) ? "--watch=false" : ""}`
88
+ ].join(" ");
89
+ Shell.spawn(`echo ${command}`);
90
+ return;
91
+ }
92
+ process.env.NODE_ENV = process.env.NODE_ENV || "TEST";
93
+ process.env.TEST_OPTIONS = TEST_OPTIONS;
94
+ let options$ = {
95
+ coverage: {
96
+ enabled: !!coverage
97
+ },
98
+ passWithNoTests: true,
99
+ watch: !!(watch || isDev)
100
+ };
101
+ if (fs.existsSync(`${cwd}/test.config.ts`)) {
102
+ options$.config = path.relative(cwd, path.resolve(cwd, "./test.config.ts"));
103
+ } else if (fs.existsSync(`${cwd}/z.test.config.ts`)) {
104
+ options$.config = path.relative(cwd, path.resolve(cwd, "./z.test.config.ts"));
105
+ } else {
106
+ options$.config = path.relative(cwd, path.resolve(dirname, "../shared.config.ts"));
107
+ }
108
+ const vitest = await createVitest("test", options$);
109
+ await vitest.start();
110
+ if (!watch)
111
+ return;
112
+ Logger.log(packageName || "", "测试已通过");
87
113
  }, {
88
- onError: (e) => {
89
- if (typeof e === 'number' && e === 1) {
90
- Logger.error('测试未通过');
91
- }
92
- else {
93
- Logger.error(e);
94
- }
95
- process.exit(1);
114
+ onError: (e) => {
115
+ if (typeof e === "number" && e === 1) {
116
+ Logger.error("测试未通过");
117
+ } else {
118
+ Logger.error(e);
96
119
  }
120
+ process.exit(1);
121
+ }
97
122
  });
98
123
 
99
124
  export { run };
package/package.json CHANGED
@@ -1,26 +1,24 @@
1
1
  {
2
2
  "name": "@deot/dev-tester",
3
- "version": "1.1.1",
3
+ "version": "2.0.0",
4
4
  "main": "dist/index.es.js",
5
5
  "module": "dist/index.es.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "type": "module",
8
8
  "files": [
9
- "dist"
9
+ "dist",
10
+ "vitest.config.ts"
10
11
  ],
11
12
  "license": "MIT",
12
13
  "publishConfig": {
13
14
  "access": "public"
14
15
  },
15
16
  "dependencies": {
16
- "@babel/core": "^7.21.4",
17
- "@babel/preset-env": "^7.21.4",
18
- "@deot/dev-shared": "^1.1.1",
17
+ "@deot/dev-shared": "^2.0.0",
18
+ "@vitest/coverage-istanbul": "^0.32.0",
19
19
  "cross-env": "^7.0.3",
20
- "inquirer": "^9.1.5",
20
+ "inquirer": "^9.2.6",
21
21
  "inquirer-autocomplete-prompt": "^3.0.0",
22
- "jest": "^29.5.0",
23
- "jest-environment-jsdom": "^29.5.0",
24
- "ts-jest": "^29.1.0"
22
+ "vitest": "^0.32.0"
25
23
  }
26
24
  }