@lytjs/plugin-testing 6.6.0 → 6.8.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.
@@ -0,0 +1,256 @@
1
+ import * as _lytjs_core from '@lytjs/core';
2
+
3
+ /**
4
+ * @lytjs/plugin-testing - 类型定义
5
+ */
6
+ interface TestingPluginOptions {
7
+ /** 默认超时时间(毫秒) */
8
+ defaultTimeout?: number;
9
+ /** 是否启用自动清理 */
10
+ autoCleanup?: boolean;
11
+ /** 测试环境配置 */
12
+ environment?: 'node' | 'jsdom' | 'browser';
13
+ }
14
+ interface WrapperOptions {
15
+ /** 挂载目标 */
16
+ container?: Element | string;
17
+ /** 组件 props */
18
+ props?: Record<string, unknown>;
19
+ /** 插槽内容 */
20
+ slots?: Record<string, unknown>;
21
+ /** 是否挂载到 DOM */
22
+ attach?: boolean;
23
+ }
24
+ interface ComponentWrapper<T = unknown> {
25
+ /** 实例 */
26
+ instance: T;
27
+ /** 根元素 */
28
+ element: Element;
29
+ /** 组件卸载 */
30
+ unmount: () => void;
31
+ /** 重新渲染 */
32
+ rerender: (props?: Record<string, unknown>) => void;
33
+ /** 查找元素 */
34
+ find: (selector: string) => Element | null;
35
+ /** 查找所有元素 */
36
+ findAll: (selector: string) => Element[];
37
+ /** 触发事件 */
38
+ trigger: (eventName: string, payload?: unknown) => void;
39
+ }
40
+ interface MockOptions {
41
+ /** 是否保留原实现 */
42
+ preserveOriginal?: boolean;
43
+ /** 模拟实现 */
44
+ implementation?: (...args: unknown[]) => unknown;
45
+ }
46
+ interface MockFn {
47
+ /** 调用次数 */
48
+ readonly callCount: number;
49
+ /** 所有调用参数 */
50
+ readonly calls: unknown[][];
51
+ /** 最后一次调用参数 */
52
+ readonly lastCall: unknown[] | undefined;
53
+ /** 模拟返回值 */
54
+ mockReturnValue: (value: unknown) => void;
55
+ /** 模拟实现 */
56
+ mockImplementation: (fn: (...args: unknown[]) => unknown) => void;
57
+ /** 重置 mock */
58
+ mockReset: () => void;
59
+ /** 清除所有调用记录 */
60
+ mockClear: () => void;
61
+ /** 原始函数(如果有) */
62
+ readonly originalFn: ((...args: unknown[]) => unknown) | undefined;
63
+ }
64
+ interface SignalTestHelpers {
65
+ /** 检查 signal 是否更新 */
66
+ trackUpdates: <T>(signal: {
67
+ value: T;
68
+ }) => {
69
+ readonly value: T;
70
+ readonly updateCount: number;
71
+ readonly history: T[];
72
+ };
73
+ /** 等待 signal 更新 */
74
+ waitForUpdate: <T>(signal: {
75
+ value: T;
76
+ }, timeout?: number) => Promise<void>;
77
+ }
78
+ interface DOMTestHelpers {
79
+ /** 等待元素出现 */
80
+ waitForElement: (selector: string, timeout?: number) => Promise<Element>;
81
+ /** 等待元素消失 */
82
+ waitForElementToDisappear: (selector: string, timeout?: number) => Promise<void>;
83
+ /** 等待文本出现 */
84
+ waitForText: (text: string, timeout?: number) => Promise<Element>;
85
+ /** 模拟用户输入 */
86
+ fillForm: (data: Record<string, string | boolean>) => void;
87
+ /** 模拟点击 */
88
+ click: (selector: string | Element) => void;
89
+ /** 检查元素是否存在 */
90
+ exists: (selector: string) => boolean;
91
+ /** 检查元素是否可见 */
92
+ isVisible: (selector: string | Element) => boolean;
93
+ /** 检查元素是否禁用 */
94
+ isDisabled: (selector: string | Element) => boolean;
95
+ /** 获取元素文本 */
96
+ text: (selector: string | Element) => string;
97
+ /** 获取元素属性 */
98
+ attribute: (selector: string | Element, name: string) => string | null;
99
+ /** 获取元素类名 */
100
+ classes: (selector: string | Element) => string[];
101
+ /** 检查元素是否包含类名 */
102
+ hasClass: (selector: string | Element, className: string) => boolean;
103
+ }
104
+ /**
105
+ * 模糊测试生成器配置
106
+ */
107
+ interface FuzzGeneratorOptions {
108
+ /** 生成值的最大长度(针对字符串、数组等) */
109
+ maxLength?: number;
110
+ /** 最小值(针对数字) */
111
+ min?: number;
112
+ /** 最大值(针对数字) */
113
+ max?: number;
114
+ /** 是否允许 null/undefined */
115
+ allowNull?: boolean;
116
+ /** 是否允许 undefined */
117
+ allowUndefined?: boolean;
118
+ }
119
+ /**
120
+ * 模糊测试结果
121
+ */
122
+ interface FuzzTestResult {
123
+ /** 测试用例总数 */
124
+ totalCases: number;
125
+ /** 通过的测试用例数 */
126
+ passedCases: number;
127
+ /** 失败的测试用例 */
128
+ failedCases: Array<{
129
+ input: unknown;
130
+ error: Error;
131
+ }>;
132
+ /** 是否全部通过 */
133
+ success: boolean;
134
+ }
135
+ /**
136
+ * 性能基准测试配置
137
+ */
138
+ interface BenchmarkOptions {
139
+ /** 迭代次数 */
140
+ iterations?: number;
141
+ /** 预热次数 */
142
+ warmupIterations?: number;
143
+ /** 是否输出详细信息 */
144
+ verbose?: boolean;
145
+ }
146
+ /**
147
+ * 性能基准测试结果
148
+ */
149
+ interface BenchmarkResult {
150
+ /** 操作名称 */
151
+ name: string;
152
+ /** 总执行时间(毫秒) */
153
+ totalTime: number;
154
+ /** 平均执行时间(毫秒) */
155
+ averageTime: number;
156
+ /** 最快执行时间(毫秒) */
157
+ minTime: number;
158
+ /** 最慢执行时间(毫秒) */
159
+ maxTime: number;
160
+ /** 操作次数 */
161
+ iterations: number;
162
+ /** 每秒操作数 */
163
+ opsPerSecond: number;
164
+ }
165
+ /**
166
+ * 性能回归测试配置
167
+ */
168
+ interface RegressionTestOptions {
169
+ /** 性能阈值(百分比),如果新的性能比基准慢超过这个百分比则失败 */
170
+ threshold?: number;
171
+ /** 基准数据 */
172
+ baseline?: BenchmarkResult;
173
+ }
174
+ /**
175
+ * 性能回归测试结果
176
+ */
177
+ interface RegressionTestResult {
178
+ /** 是否通过回归测试 */
179
+ passed: boolean;
180
+ /** 基准结果 */
181
+ baseline: BenchmarkResult;
182
+ /** 当前结果 */
183
+ current: BenchmarkResult;
184
+ /** 性能差异百分比(正值表示变慢,负值表示变快) */
185
+ regressionPercent: number;
186
+ /** 消息 */
187
+ message: string;
188
+ }
189
+ interface FuzzTestHelpers {
190
+ /** 生成随机字符串 */
191
+ randomString: (options?: FuzzGeneratorOptions) => string;
192
+ /** 生成随机数字 */
193
+ randomNumber: (options?: FuzzGeneratorOptions) => number;
194
+ /** 生成随机布尔值 */
195
+ randomBoolean: () => boolean;
196
+ /** 生成随机数组 */
197
+ randomArray: <T>(generator: () => T, options?: FuzzGeneratorOptions) => T[];
198
+ /** 生成随机对象 */
199
+ randomObject: (options?: FuzzGeneratorOptions) => Record<string, unknown>;
200
+ /** 生成随机日期 */
201
+ randomDate: (options?: FuzzGeneratorOptions) => Date;
202
+ /** 运行模糊测试 */
203
+ fuzz: <T>(generator: () => T, testFn: (input: T) => void | Promise<void>, iterations?: number) => Promise<FuzzTestResult>;
204
+ }
205
+ interface PerformanceTestHelpers {
206
+ /** 运行基准测试 */
207
+ benchmark: (name: string, fn: () => void | Promise<void>, options?: BenchmarkOptions) => Promise<BenchmarkResult>;
208
+ /** 比较两次基准测试结果 */
209
+ compare: (baseline: BenchmarkResult, current: BenchmarkResult) => {
210
+ percentChange: number;
211
+ isFaster: boolean;
212
+ isSlower: boolean;
213
+ };
214
+ /** 性能回归测试 */
215
+ regressionTest: (name: string, fn: () => void | Promise<void>, baseline: BenchmarkResult, options?: RegressionTestOptions) => Promise<RegressionTestResult>;
216
+ /** 保存基准数据 */
217
+ saveBaseline: (result: BenchmarkResult, path?: string) => void;
218
+ /** 加载基准数据 */
219
+ loadBaseline: (name: string, path?: string) => BenchmarkResult | null;
220
+ }
221
+ interface TestingContext {
222
+ /** 组件包装器 */
223
+ mount: <T = unknown>(component: unknown, options?: WrapperOptions) => ComponentWrapper<T>;
224
+ /** 创建 mock 函数 */
225
+ mockFn: (options?: MockOptions) => MockFn;
226
+ /** 模拟模块 */
227
+ mockModule: (moduleName: string, factory: () => unknown) => void;
228
+ /** 清除所有 mock */
229
+ clearAllMocks: () => void;
230
+ /** 信号测试助手 */
231
+ signal: SignalTestHelpers;
232
+ /** DOM 测试助手 */
233
+ dom: DOMTestHelpers;
234
+ /** 等待指定时间 */
235
+ wait: (ms: number) => Promise<void>;
236
+ /** 等待条件满足 */
237
+ waitFor: (condition: () => boolean | Promise<boolean>, timeout?: number) => Promise<void>;
238
+ /** 下一帧 */
239
+ nextTick: () => Promise<void>;
240
+ /** 模糊测试助手 */
241
+ fuzz: FuzzTestHelpers;
242
+ /** 性能测试助手 */
243
+ performance: PerformanceTestHelpers;
244
+ }
245
+
246
+ /**
247
+ * 创建 mock 函数
248
+ */
249
+ declare function createMockFn(options?: MockOptions): MockFn;
250
+ /**
251
+ * 创建测试上下文
252
+ */
253
+ declare function createTestingContext(_options?: TestingPluginOptions): TestingContext;
254
+ declare const pluginTesting: _lytjs_core.PluginDefinition<unknown>;
255
+
256
+ export { type BenchmarkOptions, type BenchmarkResult, type ComponentWrapper, type DOMTestHelpers, type FuzzGeneratorOptions, type FuzzTestHelpers, type FuzzTestResult, type MockFn, type MockOptions, type PerformanceTestHelpers, type RegressionTestOptions, type RegressionTestResult, type SignalTestHelpers, type TestingContext, type TestingPluginOptions, type WrapperOptions, createMockFn, createTestingContext, pluginTesting as default };
@@ -0,0 +1,256 @@
1
+ import * as _lytjs_core from '@lytjs/core';
2
+
3
+ /**
4
+ * @lytjs/plugin-testing - 类型定义
5
+ */
6
+ interface TestingPluginOptions {
7
+ /** 默认超时时间(毫秒) */
8
+ defaultTimeout?: number;
9
+ /** 是否启用自动清理 */
10
+ autoCleanup?: boolean;
11
+ /** 测试环境配置 */
12
+ environment?: 'node' | 'jsdom' | 'browser';
13
+ }
14
+ interface WrapperOptions {
15
+ /** 挂载目标 */
16
+ container?: Element | string;
17
+ /** 组件 props */
18
+ props?: Record<string, unknown>;
19
+ /** 插槽内容 */
20
+ slots?: Record<string, unknown>;
21
+ /** 是否挂载到 DOM */
22
+ attach?: boolean;
23
+ }
24
+ interface ComponentWrapper<T = unknown> {
25
+ /** 实例 */
26
+ instance: T;
27
+ /** 根元素 */
28
+ element: Element;
29
+ /** 组件卸载 */
30
+ unmount: () => void;
31
+ /** 重新渲染 */
32
+ rerender: (props?: Record<string, unknown>) => void;
33
+ /** 查找元素 */
34
+ find: (selector: string) => Element | null;
35
+ /** 查找所有元素 */
36
+ findAll: (selector: string) => Element[];
37
+ /** 触发事件 */
38
+ trigger: (eventName: string, payload?: unknown) => void;
39
+ }
40
+ interface MockOptions {
41
+ /** 是否保留原实现 */
42
+ preserveOriginal?: boolean;
43
+ /** 模拟实现 */
44
+ implementation?: (...args: unknown[]) => unknown;
45
+ }
46
+ interface MockFn {
47
+ /** 调用次数 */
48
+ readonly callCount: number;
49
+ /** 所有调用参数 */
50
+ readonly calls: unknown[][];
51
+ /** 最后一次调用参数 */
52
+ readonly lastCall: unknown[] | undefined;
53
+ /** 模拟返回值 */
54
+ mockReturnValue: (value: unknown) => void;
55
+ /** 模拟实现 */
56
+ mockImplementation: (fn: (...args: unknown[]) => unknown) => void;
57
+ /** 重置 mock */
58
+ mockReset: () => void;
59
+ /** 清除所有调用记录 */
60
+ mockClear: () => void;
61
+ /** 原始函数(如果有) */
62
+ readonly originalFn: ((...args: unknown[]) => unknown) | undefined;
63
+ }
64
+ interface SignalTestHelpers {
65
+ /** 检查 signal 是否更新 */
66
+ trackUpdates: <T>(signal: {
67
+ value: T;
68
+ }) => {
69
+ readonly value: T;
70
+ readonly updateCount: number;
71
+ readonly history: T[];
72
+ };
73
+ /** 等待 signal 更新 */
74
+ waitForUpdate: <T>(signal: {
75
+ value: T;
76
+ }, timeout?: number) => Promise<void>;
77
+ }
78
+ interface DOMTestHelpers {
79
+ /** 等待元素出现 */
80
+ waitForElement: (selector: string, timeout?: number) => Promise<Element>;
81
+ /** 等待元素消失 */
82
+ waitForElementToDisappear: (selector: string, timeout?: number) => Promise<void>;
83
+ /** 等待文本出现 */
84
+ waitForText: (text: string, timeout?: number) => Promise<Element>;
85
+ /** 模拟用户输入 */
86
+ fillForm: (data: Record<string, string | boolean>) => void;
87
+ /** 模拟点击 */
88
+ click: (selector: string | Element) => void;
89
+ /** 检查元素是否存在 */
90
+ exists: (selector: string) => boolean;
91
+ /** 检查元素是否可见 */
92
+ isVisible: (selector: string | Element) => boolean;
93
+ /** 检查元素是否禁用 */
94
+ isDisabled: (selector: string | Element) => boolean;
95
+ /** 获取元素文本 */
96
+ text: (selector: string | Element) => string;
97
+ /** 获取元素属性 */
98
+ attribute: (selector: string | Element, name: string) => string | null;
99
+ /** 获取元素类名 */
100
+ classes: (selector: string | Element) => string[];
101
+ /** 检查元素是否包含类名 */
102
+ hasClass: (selector: string | Element, className: string) => boolean;
103
+ }
104
+ /**
105
+ * 模糊测试生成器配置
106
+ */
107
+ interface FuzzGeneratorOptions {
108
+ /** 生成值的最大长度(针对字符串、数组等) */
109
+ maxLength?: number;
110
+ /** 最小值(针对数字) */
111
+ min?: number;
112
+ /** 最大值(针对数字) */
113
+ max?: number;
114
+ /** 是否允许 null/undefined */
115
+ allowNull?: boolean;
116
+ /** 是否允许 undefined */
117
+ allowUndefined?: boolean;
118
+ }
119
+ /**
120
+ * 模糊测试结果
121
+ */
122
+ interface FuzzTestResult {
123
+ /** 测试用例总数 */
124
+ totalCases: number;
125
+ /** 通过的测试用例数 */
126
+ passedCases: number;
127
+ /** 失败的测试用例 */
128
+ failedCases: Array<{
129
+ input: unknown;
130
+ error: Error;
131
+ }>;
132
+ /** 是否全部通过 */
133
+ success: boolean;
134
+ }
135
+ /**
136
+ * 性能基准测试配置
137
+ */
138
+ interface BenchmarkOptions {
139
+ /** 迭代次数 */
140
+ iterations?: number;
141
+ /** 预热次数 */
142
+ warmupIterations?: number;
143
+ /** 是否输出详细信息 */
144
+ verbose?: boolean;
145
+ }
146
+ /**
147
+ * 性能基准测试结果
148
+ */
149
+ interface BenchmarkResult {
150
+ /** 操作名称 */
151
+ name: string;
152
+ /** 总执行时间(毫秒) */
153
+ totalTime: number;
154
+ /** 平均执行时间(毫秒) */
155
+ averageTime: number;
156
+ /** 最快执行时间(毫秒) */
157
+ minTime: number;
158
+ /** 最慢执行时间(毫秒) */
159
+ maxTime: number;
160
+ /** 操作次数 */
161
+ iterations: number;
162
+ /** 每秒操作数 */
163
+ opsPerSecond: number;
164
+ }
165
+ /**
166
+ * 性能回归测试配置
167
+ */
168
+ interface RegressionTestOptions {
169
+ /** 性能阈值(百分比),如果新的性能比基准慢超过这个百分比则失败 */
170
+ threshold?: number;
171
+ /** 基准数据 */
172
+ baseline?: BenchmarkResult;
173
+ }
174
+ /**
175
+ * 性能回归测试结果
176
+ */
177
+ interface RegressionTestResult {
178
+ /** 是否通过回归测试 */
179
+ passed: boolean;
180
+ /** 基准结果 */
181
+ baseline: BenchmarkResult;
182
+ /** 当前结果 */
183
+ current: BenchmarkResult;
184
+ /** 性能差异百分比(正值表示变慢,负值表示变快) */
185
+ regressionPercent: number;
186
+ /** 消息 */
187
+ message: string;
188
+ }
189
+ interface FuzzTestHelpers {
190
+ /** 生成随机字符串 */
191
+ randomString: (options?: FuzzGeneratorOptions) => string;
192
+ /** 生成随机数字 */
193
+ randomNumber: (options?: FuzzGeneratorOptions) => number;
194
+ /** 生成随机布尔值 */
195
+ randomBoolean: () => boolean;
196
+ /** 生成随机数组 */
197
+ randomArray: <T>(generator: () => T, options?: FuzzGeneratorOptions) => T[];
198
+ /** 生成随机对象 */
199
+ randomObject: (options?: FuzzGeneratorOptions) => Record<string, unknown>;
200
+ /** 生成随机日期 */
201
+ randomDate: (options?: FuzzGeneratorOptions) => Date;
202
+ /** 运行模糊测试 */
203
+ fuzz: <T>(generator: () => T, testFn: (input: T) => void | Promise<void>, iterations?: number) => Promise<FuzzTestResult>;
204
+ }
205
+ interface PerformanceTestHelpers {
206
+ /** 运行基准测试 */
207
+ benchmark: (name: string, fn: () => void | Promise<void>, options?: BenchmarkOptions) => Promise<BenchmarkResult>;
208
+ /** 比较两次基准测试结果 */
209
+ compare: (baseline: BenchmarkResult, current: BenchmarkResult) => {
210
+ percentChange: number;
211
+ isFaster: boolean;
212
+ isSlower: boolean;
213
+ };
214
+ /** 性能回归测试 */
215
+ regressionTest: (name: string, fn: () => void | Promise<void>, baseline: BenchmarkResult, options?: RegressionTestOptions) => Promise<RegressionTestResult>;
216
+ /** 保存基准数据 */
217
+ saveBaseline: (result: BenchmarkResult, path?: string) => void;
218
+ /** 加载基准数据 */
219
+ loadBaseline: (name: string, path?: string) => BenchmarkResult | null;
220
+ }
221
+ interface TestingContext {
222
+ /** 组件包装器 */
223
+ mount: <T = unknown>(component: unknown, options?: WrapperOptions) => ComponentWrapper<T>;
224
+ /** 创建 mock 函数 */
225
+ mockFn: (options?: MockOptions) => MockFn;
226
+ /** 模拟模块 */
227
+ mockModule: (moduleName: string, factory: () => unknown) => void;
228
+ /** 清除所有 mock */
229
+ clearAllMocks: () => void;
230
+ /** 信号测试助手 */
231
+ signal: SignalTestHelpers;
232
+ /** DOM 测试助手 */
233
+ dom: DOMTestHelpers;
234
+ /** 等待指定时间 */
235
+ wait: (ms: number) => Promise<void>;
236
+ /** 等待条件满足 */
237
+ waitFor: (condition: () => boolean | Promise<boolean>, timeout?: number) => Promise<void>;
238
+ /** 下一帧 */
239
+ nextTick: () => Promise<void>;
240
+ /** 模糊测试助手 */
241
+ fuzz: FuzzTestHelpers;
242
+ /** 性能测试助手 */
243
+ performance: PerformanceTestHelpers;
244
+ }
245
+
246
+ /**
247
+ * 创建 mock 函数
248
+ */
249
+ declare function createMockFn(options?: MockOptions): MockFn;
250
+ /**
251
+ * 创建测试上下文
252
+ */
253
+ declare function createTestingContext(_options?: TestingPluginOptions): TestingContext;
254
+ declare const pluginTesting: _lytjs_core.PluginDefinition<unknown>;
255
+
256
+ export { type BenchmarkOptions, type BenchmarkResult, type ComponentWrapper, type DOMTestHelpers, type FuzzGeneratorOptions, type FuzzTestHelpers, type FuzzTestResult, type MockFn, type MockOptions, type PerformanceTestHelpers, type RegressionTestOptions, type RegressionTestResult, type SignalTestHelpers, type TestingContext, type TestingPluginOptions, type WrapperOptions, createMockFn, createTestingContext, pluginTesting as default };
package/package.json CHANGED
@@ -1,51 +1,51 @@
1
- {
2
- "name": "@lytjs/plugin-testing",
3
- "version": "6.6.0",
4
- "description": "LytJS official testing plugin with testing utilities and helpers",
5
- "type": "module",
6
- "main": "./dist/index.cjs",
7
- "module": "./dist/index.mjs",
8
- "types": "./dist/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "types": "./dist/index.d.ts",
12
- "import": "./dist/index.mjs",
13
- "require": "./dist/index.cjs"
14
- },
15
- "./package.json": "./package.json"
16
- },
17
- "files": [
18
- "dist"
19
- ],
20
- "sideEffects": false,
21
- "scripts": {
22
- "build": "tsup",
23
- "dev": "tsup --watch",
24
- "test": "vitest run",
25
- "test:watch": "vitest",
26
- "test:coverage": "vitest run --coverage",
27
- "type-check": "tsc --noEmit",
28
- "lint": "eslint \"src/**/*.ts\"",
29
- "clean": "rm -rf dist"
30
- },
31
- "dependencies": {
32
- "@lytjs/core": "workspace:*",
33
- "@lytjs/reactivity": "workspace:*"
34
- },
35
- "devDependencies": {
36
- "tsup": "^8.0.0",
37
- "typescript": "^5.4.0",
38
- "vitest": "^3.0.0"
39
- },
40
- "license": "MIT",
41
- "repository": {
42
- "type": "git",
43
- "url": "https://gitee.com/lytjs/lytjs.git",
44
- "directory": "packages/plugins/packages/plugin-testing"
45
- },
46
- "keywords": [
47
- "lytjs",
48
- "testing",
49
- "test-utilities"
50
- ]
51
- }
1
+ {
2
+ "name": "@lytjs/plugin-testing",
3
+ "version": "6.8.0",
4
+ "description": "LytJS official testing plugin with testing utilities and helpers",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.mjs",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.mjs",
13
+ "require": "./dist/index.cjs"
14
+ },
15
+ "./package.json": "./package.json"
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "sideEffects": false,
21
+ "scripts": {
22
+ "build": "tsup",
23
+ "dev": "tsup --watch",
24
+ "test": "vitest run",
25
+ "test:watch": "vitest",
26
+ "test:coverage": "vitest run --coverage",
27
+ "type-check": "tsc --noEmit",
28
+ "lint": "eslint \"src/**/*.ts\"",
29
+ "clean": "rm -rf dist"
30
+ },
31
+ "dependencies": {
32
+ "@lytjs/core": "workspace:*",
33
+ "@lytjs/reactivity": "workspace:*"
34
+ },
35
+ "devDependencies": {
36
+ "tsup": "^8.0.0",
37
+ "typescript": "^5.4.0",
38
+ "vitest": "^3.0.0"
39
+ },
40
+ "license": "MIT",
41
+ "repository": {
42
+ "type": "git",
43
+ "url": "https://gitee.com/lytjs/lytjs.git",
44
+ "directory": "packages/plugins/packages/plugin-testing"
45
+ },
46
+ "keywords": [
47
+ "lytjs",
48
+ "testing",
49
+ "test-utilities"
50
+ ]
51
+ }