ai-tests 2.0.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.
- package/.turbo/turbo-build.log +5 -0
- package/CHANGELOG.md +3 -0
- package/README.md +214 -0
- package/dist/assertions.d.ts +132 -0
- package/dist/assertions.d.ts.map +1 -0
- package/dist/assertions.js +384 -0
- package/dist/assertions.js.map +1 -0
- package/dist/cli.d.ts +13 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +77 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/local.d.ts +31 -0
- package/dist/local.d.ts.map +1 -0
- package/dist/local.js +63 -0
- package/dist/local.js.map +1 -0
- package/dist/runner.d.ts +68 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +215 -0
- package/dist/runner.js.map +1 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/worker.d.ts +55 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +92 -0
- package/dist/worker.js.map +1 -0
- package/package.json +58 -0
- package/src/assertions.ts +465 -0
- package/src/cli.ts +87 -0
- package/src/index.ts +33 -0
- package/src/local.ts +76 -0
- package/src/runner.ts +238 -0
- package/src/types.ts +68 -0
- package/src/worker.ts +112 -0
- package/test/assertions.test.ts +607 -0
- package/test/index.test.ts +51 -0
- package/test/local.test.ts +31 -0
- package/test/runner.test.ts +379 -0
- package/test/worker.test.ts +198 -0
- package/tsconfig.json +23 -0
- package/vitest.config.ts +11 -0
- package/wrangler.toml +6 -0
package/dist/runner.d.ts
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test runner - describe, it, test, hooks
|
|
3
|
+
*
|
|
4
|
+
* Provides vitest-compatible test runner API via RPC.
|
|
5
|
+
*/
|
|
6
|
+
import { RpcTarget } from 'cloudflare:workers';
|
|
7
|
+
import type { TestResults, TestFn, HookFn } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Test runner that collects and runs tests
|
|
10
|
+
*/
|
|
11
|
+
export declare class TestRunner extends RpcTarget {
|
|
12
|
+
private tests;
|
|
13
|
+
private currentSuite;
|
|
14
|
+
private beforeEachHooks;
|
|
15
|
+
private afterEachHooks;
|
|
16
|
+
private beforeAllHooks;
|
|
17
|
+
private afterAllHooks;
|
|
18
|
+
/**
|
|
19
|
+
* Define a test suite
|
|
20
|
+
*/
|
|
21
|
+
describe(name: string, fn: () => void): void;
|
|
22
|
+
/**
|
|
23
|
+
* Define a test
|
|
24
|
+
*/
|
|
25
|
+
it(name: string, fn: TestFn): void;
|
|
26
|
+
/**
|
|
27
|
+
* Alias for it
|
|
28
|
+
*/
|
|
29
|
+
test(name: string, fn: TestFn): void;
|
|
30
|
+
/**
|
|
31
|
+
* Skip a test
|
|
32
|
+
*/
|
|
33
|
+
skip(name: string, _fn?: TestFn): void;
|
|
34
|
+
/**
|
|
35
|
+
* Run only this test
|
|
36
|
+
*/
|
|
37
|
+
only(name: string, fn: TestFn): void;
|
|
38
|
+
/**
|
|
39
|
+
* Register a beforeEach hook
|
|
40
|
+
*/
|
|
41
|
+
beforeEach(fn: HookFn): void;
|
|
42
|
+
/**
|
|
43
|
+
* Register an afterEach hook
|
|
44
|
+
*/
|
|
45
|
+
afterEach(fn: HookFn): void;
|
|
46
|
+
/**
|
|
47
|
+
* Register a beforeAll hook
|
|
48
|
+
*/
|
|
49
|
+
beforeAll(fn: HookFn): void;
|
|
50
|
+
/**
|
|
51
|
+
* Register an afterAll hook
|
|
52
|
+
*/
|
|
53
|
+
afterAll(fn: HookFn): void;
|
|
54
|
+
/**
|
|
55
|
+
* Run all registered tests and return results
|
|
56
|
+
*/
|
|
57
|
+
run(): Promise<TestResults>;
|
|
58
|
+
/**
|
|
59
|
+
* Clear all registered tests and hooks
|
|
60
|
+
*/
|
|
61
|
+
reset(): void;
|
|
62
|
+
private buildResults;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create a new test runner instance
|
|
66
|
+
*/
|
|
67
|
+
export declare function createRunner(): TestRunner;
|
|
68
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,EAAc,WAAW,EAAE,MAAM,EAAE,MAAM,EAAkB,MAAM,YAAY,CAAA;AAEzF;;GAEG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACvC,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,eAAe,CAAe;IACtC,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,aAAa,CAAe;IAEpC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAgB5C;;OAEG;IACH,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAYlC;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAIpC;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAUtC;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAapC;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI5B;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI3B;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI3B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACG,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;IAuFjC;;OAEG;IACH,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,YAAY;CAUrB;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,UAAU,CAEzC"}
|
package/dist/runner.js
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test runner - describe, it, test, hooks
|
|
3
|
+
*
|
|
4
|
+
* Provides vitest-compatible test runner API via RPC.
|
|
5
|
+
*/
|
|
6
|
+
import { RpcTarget } from 'cloudflare:workers';
|
|
7
|
+
/**
|
|
8
|
+
* Test runner that collects and runs tests
|
|
9
|
+
*/
|
|
10
|
+
export class TestRunner extends RpcTarget {
|
|
11
|
+
tests = [];
|
|
12
|
+
currentSuite = '';
|
|
13
|
+
beforeEachHooks = [];
|
|
14
|
+
afterEachHooks = [];
|
|
15
|
+
beforeAllHooks = [];
|
|
16
|
+
afterAllHooks = [];
|
|
17
|
+
/**
|
|
18
|
+
* Define a test suite
|
|
19
|
+
*/
|
|
20
|
+
describe(name, fn) {
|
|
21
|
+
const prevSuite = this.currentSuite;
|
|
22
|
+
const prevBeforeEach = [...this.beforeEachHooks];
|
|
23
|
+
const prevAfterEach = [...this.afterEachHooks];
|
|
24
|
+
this.currentSuite = this.currentSuite ? `${this.currentSuite} > ${name}` : name;
|
|
25
|
+
try {
|
|
26
|
+
fn();
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
this.currentSuite = prevSuite;
|
|
30
|
+
this.beforeEachHooks = prevBeforeEach;
|
|
31
|
+
this.afterEachHooks = prevAfterEach;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Define a test
|
|
36
|
+
*/
|
|
37
|
+
it(name, fn) {
|
|
38
|
+
const fullName = this.currentSuite ? `${this.currentSuite} > ${name}` : name;
|
|
39
|
+
this.tests.push({
|
|
40
|
+
name: fullName,
|
|
41
|
+
fn,
|
|
42
|
+
hooks: {
|
|
43
|
+
before: [...this.beforeEachHooks],
|
|
44
|
+
after: [...this.afterEachHooks]
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Alias for it
|
|
50
|
+
*/
|
|
51
|
+
test(name, fn) {
|
|
52
|
+
this.it(name, fn);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Skip a test
|
|
56
|
+
*/
|
|
57
|
+
skip(name, _fn) {
|
|
58
|
+
const fullName = this.currentSuite ? `${this.currentSuite} > ${name}` : name;
|
|
59
|
+
this.tests.push({
|
|
60
|
+
name: fullName,
|
|
61
|
+
fn: null,
|
|
62
|
+
hooks: { before: [], after: [] },
|
|
63
|
+
skip: true
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Run only this test
|
|
68
|
+
*/
|
|
69
|
+
only(name, fn) {
|
|
70
|
+
const fullName = this.currentSuite ? `${this.currentSuite} > ${name}` : name;
|
|
71
|
+
this.tests.push({
|
|
72
|
+
name: fullName,
|
|
73
|
+
fn,
|
|
74
|
+
hooks: {
|
|
75
|
+
before: [...this.beforeEachHooks],
|
|
76
|
+
after: [...this.afterEachHooks]
|
|
77
|
+
},
|
|
78
|
+
only: true
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Register a beforeEach hook
|
|
83
|
+
*/
|
|
84
|
+
beforeEach(fn) {
|
|
85
|
+
this.beforeEachHooks.push(fn);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Register an afterEach hook
|
|
89
|
+
*/
|
|
90
|
+
afterEach(fn) {
|
|
91
|
+
this.afterEachHooks.push(fn);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Register a beforeAll hook
|
|
95
|
+
*/
|
|
96
|
+
beforeAll(fn) {
|
|
97
|
+
this.beforeAllHooks.push(fn);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Register an afterAll hook
|
|
101
|
+
*/
|
|
102
|
+
afterAll(fn) {
|
|
103
|
+
this.afterAllHooks.push(fn);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Run all registered tests and return results
|
|
107
|
+
*/
|
|
108
|
+
async run() {
|
|
109
|
+
const startTime = Date.now();
|
|
110
|
+
const results = [];
|
|
111
|
+
// Check for .only tests
|
|
112
|
+
const hasOnly = this.tests.some(t => t.only);
|
|
113
|
+
const testsToRun = hasOnly
|
|
114
|
+
? this.tests.filter(t => t.only || t.skip)
|
|
115
|
+
: this.tests;
|
|
116
|
+
// Run beforeAll hooks
|
|
117
|
+
for (const hook of this.beforeAllHooks) {
|
|
118
|
+
try {
|
|
119
|
+
await hook();
|
|
120
|
+
}
|
|
121
|
+
catch (e) {
|
|
122
|
+
// If beforeAll fails, fail all tests
|
|
123
|
+
const error = e instanceof Error ? e.message : String(e);
|
|
124
|
+
for (const test of testsToRun) {
|
|
125
|
+
results.push({
|
|
126
|
+
name: test.name,
|
|
127
|
+
passed: false,
|
|
128
|
+
error: `beforeAll hook failed: ${error}`,
|
|
129
|
+
duration: 0
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return this.buildResults(results, startTime);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Run each test
|
|
136
|
+
for (const test of testsToRun) {
|
|
137
|
+
if (test.skip) {
|
|
138
|
+
results.push({
|
|
139
|
+
name: test.name,
|
|
140
|
+
passed: true,
|
|
141
|
+
skipped: true,
|
|
142
|
+
duration: 0
|
|
143
|
+
});
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
const testStart = Date.now();
|
|
147
|
+
try {
|
|
148
|
+
// Run beforeEach hooks
|
|
149
|
+
for (const hook of test.hooks.before) {
|
|
150
|
+
await hook();
|
|
151
|
+
}
|
|
152
|
+
// Run the test
|
|
153
|
+
if (test.fn) {
|
|
154
|
+
await test.fn();
|
|
155
|
+
}
|
|
156
|
+
// Run afterEach hooks
|
|
157
|
+
for (const hook of test.hooks.after) {
|
|
158
|
+
await hook();
|
|
159
|
+
}
|
|
160
|
+
results.push({
|
|
161
|
+
name: test.name,
|
|
162
|
+
passed: true,
|
|
163
|
+
duration: Date.now() - testStart
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
catch (e) {
|
|
167
|
+
results.push({
|
|
168
|
+
name: test.name,
|
|
169
|
+
passed: false,
|
|
170
|
+
error: e instanceof Error ? e.message : String(e),
|
|
171
|
+
duration: Date.now() - testStart
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// Run afterAll hooks
|
|
176
|
+
for (const hook of this.afterAllHooks) {
|
|
177
|
+
try {
|
|
178
|
+
await hook();
|
|
179
|
+
}
|
|
180
|
+
catch (e) {
|
|
181
|
+
// Log but don't fail tests
|
|
182
|
+
console.error('afterAll hook failed:', e);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return this.buildResults(results, startTime);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Clear all registered tests and hooks
|
|
189
|
+
*/
|
|
190
|
+
reset() {
|
|
191
|
+
this.tests = [];
|
|
192
|
+
this.currentSuite = '';
|
|
193
|
+
this.beforeEachHooks = [];
|
|
194
|
+
this.afterEachHooks = [];
|
|
195
|
+
this.beforeAllHooks = [];
|
|
196
|
+
this.afterAllHooks = [];
|
|
197
|
+
}
|
|
198
|
+
buildResults(results, startTime) {
|
|
199
|
+
return {
|
|
200
|
+
total: results.length,
|
|
201
|
+
passed: results.filter(r => r.passed && !r.skipped).length,
|
|
202
|
+
failed: results.filter(r => !r.passed).length,
|
|
203
|
+
skipped: results.filter(r => r.skipped).length,
|
|
204
|
+
tests: results,
|
|
205
|
+
duration: Date.now() - startTime
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Create a new test runner instance
|
|
211
|
+
*/
|
|
212
|
+
export function createRunner() {
|
|
213
|
+
return new TestRunner();
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types for ai-test
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Test result for a single test
|
|
6
|
+
*/
|
|
7
|
+
export interface TestResult {
|
|
8
|
+
name: string;
|
|
9
|
+
passed: boolean;
|
|
10
|
+
skipped?: boolean;
|
|
11
|
+
error?: string;
|
|
12
|
+
duration: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Aggregated test results
|
|
16
|
+
*/
|
|
17
|
+
export interface TestResults {
|
|
18
|
+
total: number;
|
|
19
|
+
passed: number;
|
|
20
|
+
failed: number;
|
|
21
|
+
skipped: number;
|
|
22
|
+
tests: TestResult[];
|
|
23
|
+
duration: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Test function
|
|
27
|
+
*/
|
|
28
|
+
export type TestFn = () => void | Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Hook function (beforeEach, afterEach, etc.)
|
|
31
|
+
*/
|
|
32
|
+
export type HookFn = () => void | Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Registered test
|
|
35
|
+
*/
|
|
36
|
+
export interface RegisteredTest {
|
|
37
|
+
name: string;
|
|
38
|
+
fn: TestFn | null;
|
|
39
|
+
hooks: {
|
|
40
|
+
before: HookFn[];
|
|
41
|
+
after: HookFn[];
|
|
42
|
+
};
|
|
43
|
+
skip?: boolean;
|
|
44
|
+
only?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Test suite context
|
|
48
|
+
*/
|
|
49
|
+
export interface SuiteContext {
|
|
50
|
+
name: string;
|
|
51
|
+
beforeEach: HookFn[];
|
|
52
|
+
afterEach: HookFn[];
|
|
53
|
+
beforeAll: HookFn[];
|
|
54
|
+
afterAll: HookFn[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Environment with test worker binding
|
|
58
|
+
*/
|
|
59
|
+
export interface TestEnv {
|
|
60
|
+
TEST?: unknown;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAE/C;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAE/C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,EAAE,CAAA;QAChB,KAAK,EAAE,MAAM,EAAE,CAAA;KAChB,CAAA;IACD,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/dist/worker.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Worker - provides test utilities via RPC
|
|
3
|
+
*
|
|
4
|
+
* This worker can be deployed to Cloudflare Workers or run locally via Miniflare.
|
|
5
|
+
* It exposes expect, should, assert, and a test runner via Workers RPC.
|
|
6
|
+
*
|
|
7
|
+
* Uses Cloudflare Workers RPC (WorkerEntrypoint, RpcTarget) for communication.
|
|
8
|
+
*/
|
|
9
|
+
import { WorkerEntrypoint, RpcTarget } from 'cloudflare:workers';
|
|
10
|
+
import { Assertion } from './assertions.js';
|
|
11
|
+
import { TestRunner } from './runner.js';
|
|
12
|
+
/**
|
|
13
|
+
* Core test service - extends RpcTarget so it can be passed over RPC
|
|
14
|
+
*
|
|
15
|
+
* Contains all test functionality: assertions (expect, should, assert)
|
|
16
|
+
* and test runner (describe, it, test, hooks)
|
|
17
|
+
*/
|
|
18
|
+
export declare class TestServiceCore extends RpcTarget {
|
|
19
|
+
protected runner: TestRunner;
|
|
20
|
+
constructor();
|
|
21
|
+
expect(value: unknown, message?: string): Assertion;
|
|
22
|
+
should(value: unknown): Assertion;
|
|
23
|
+
get assert(): Chai.AssertStatic;
|
|
24
|
+
describe(name: string, fn: () => void): void;
|
|
25
|
+
it(name: string, fn: () => void | Promise<void>): void;
|
|
26
|
+
test(name: string, fn: () => void | Promise<void>): void;
|
|
27
|
+
skip(name: string, fn?: () => void | Promise<void>): void;
|
|
28
|
+
only(name: string, fn: () => void | Promise<void>): void;
|
|
29
|
+
beforeEach(fn: () => void | Promise<void>): void;
|
|
30
|
+
afterEach(fn: () => void | Promise<void>): void;
|
|
31
|
+
beforeAll(fn: () => void | Promise<void>): void;
|
|
32
|
+
afterAll(fn: () => void | Promise<void>): void;
|
|
33
|
+
run(): Promise<import("./types.js").TestResults>;
|
|
34
|
+
reset(): void;
|
|
35
|
+
createRunner(): TestRunner;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Main test service exposed via RPC as WorkerEntrypoint
|
|
39
|
+
*
|
|
40
|
+
* Usage:
|
|
41
|
+
* const tests = await env.TEST.connect()
|
|
42
|
+
* tests.expect(1).to.equal(1)
|
|
43
|
+
* tests.describe('suite', () => { ... })
|
|
44
|
+
* const results = await tests.run()
|
|
45
|
+
*/
|
|
46
|
+
export declare class TestService extends WorkerEntrypoint {
|
|
47
|
+
/**
|
|
48
|
+
* Get a test service instance - returns an RpcTarget that can be used directly
|
|
49
|
+
* This avoids boilerplate delegation and allows using `test` method name
|
|
50
|
+
*/
|
|
51
|
+
connect(): TestServiceCore;
|
|
52
|
+
}
|
|
53
|
+
export default TestService;
|
|
54
|
+
export { TestService as TestWorker };
|
|
55
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,SAAS,EAA0B,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAAE,UAAU,EAAgB,MAAM,aAAa,CAAA;AAEtD;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,SAAS,CAAC,MAAM,EAAE,UAAU,CAAA;;IAO5B,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS;IAInD,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS;IAIjC,IAAI,MAAM,sBAET;IAED,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAI5C,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAItD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIxD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIzD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIxD,UAAU,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIhD,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI/C,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI/C,QAAQ,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAIxC,GAAG;IAIT,KAAK,IAAI,IAAI;IAIb,YAAY,IAAI,UAAU;CAG3B;AAED;;;;;;;;GAQG;AACH,qBAAa,WAAY,SAAQ,gBAAgB;IAC/C;;;OAGG;IACH,OAAO,IAAI,eAAe;CAG3B;AAGD,eAAe,WAAW,CAAA;AAG1B,OAAO,EAAE,WAAW,IAAI,UAAU,EAAE,CAAA"}
|
package/dist/worker.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Worker - provides test utilities via RPC
|
|
3
|
+
*
|
|
4
|
+
* This worker can be deployed to Cloudflare Workers or run locally via Miniflare.
|
|
5
|
+
* It exposes expect, should, assert, and a test runner via Workers RPC.
|
|
6
|
+
*
|
|
7
|
+
* Uses Cloudflare Workers RPC (WorkerEntrypoint, RpcTarget) for communication.
|
|
8
|
+
*/
|
|
9
|
+
import { WorkerEntrypoint, RpcTarget } from 'cloudflare:workers';
|
|
10
|
+
import { Assertion, expect, should, assert } from './assertions.js';
|
|
11
|
+
import { TestRunner, createRunner } from './runner.js';
|
|
12
|
+
/**
|
|
13
|
+
* Core test service - extends RpcTarget so it can be passed over RPC
|
|
14
|
+
*
|
|
15
|
+
* Contains all test functionality: assertions (expect, should, assert)
|
|
16
|
+
* and test runner (describe, it, test, hooks)
|
|
17
|
+
*/
|
|
18
|
+
export class TestServiceCore extends RpcTarget {
|
|
19
|
+
runner;
|
|
20
|
+
constructor() {
|
|
21
|
+
super();
|
|
22
|
+
this.runner = createRunner();
|
|
23
|
+
}
|
|
24
|
+
expect(value, message) {
|
|
25
|
+
return expect(value, message);
|
|
26
|
+
}
|
|
27
|
+
should(value) {
|
|
28
|
+
return should(value);
|
|
29
|
+
}
|
|
30
|
+
get assert() {
|
|
31
|
+
return assert;
|
|
32
|
+
}
|
|
33
|
+
describe(name, fn) {
|
|
34
|
+
this.runner.describe(name, fn);
|
|
35
|
+
}
|
|
36
|
+
it(name, fn) {
|
|
37
|
+
this.runner.it(name, fn);
|
|
38
|
+
}
|
|
39
|
+
test(name, fn) {
|
|
40
|
+
this.runner.test(name, fn);
|
|
41
|
+
}
|
|
42
|
+
skip(name, fn) {
|
|
43
|
+
this.runner.skip(name, fn);
|
|
44
|
+
}
|
|
45
|
+
only(name, fn) {
|
|
46
|
+
this.runner.only(name, fn);
|
|
47
|
+
}
|
|
48
|
+
beforeEach(fn) {
|
|
49
|
+
this.runner.beforeEach(fn);
|
|
50
|
+
}
|
|
51
|
+
afterEach(fn) {
|
|
52
|
+
this.runner.afterEach(fn);
|
|
53
|
+
}
|
|
54
|
+
beforeAll(fn) {
|
|
55
|
+
this.runner.beforeAll(fn);
|
|
56
|
+
}
|
|
57
|
+
afterAll(fn) {
|
|
58
|
+
this.runner.afterAll(fn);
|
|
59
|
+
}
|
|
60
|
+
async run() {
|
|
61
|
+
return this.runner.run();
|
|
62
|
+
}
|
|
63
|
+
reset() {
|
|
64
|
+
this.runner.reset();
|
|
65
|
+
}
|
|
66
|
+
createRunner() {
|
|
67
|
+
return createRunner();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Main test service exposed via RPC as WorkerEntrypoint
|
|
72
|
+
*
|
|
73
|
+
* Usage:
|
|
74
|
+
* const tests = await env.TEST.connect()
|
|
75
|
+
* tests.expect(1).to.equal(1)
|
|
76
|
+
* tests.describe('suite', () => { ... })
|
|
77
|
+
* const results = await tests.run()
|
|
78
|
+
*/
|
|
79
|
+
export class TestService extends WorkerEntrypoint {
|
|
80
|
+
/**
|
|
81
|
+
* Get a test service instance - returns an RpcTarget that can be used directly
|
|
82
|
+
* This avoids boilerplate delegation and allows using `test` method name
|
|
83
|
+
*/
|
|
84
|
+
connect() {
|
|
85
|
+
return new TestServiceCore();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Export as default for WorkerEntrypoint pattern
|
|
89
|
+
export default TestService;
|
|
90
|
+
// Export aliases
|
|
91
|
+
export { TestService as TestWorker };
|
|
92
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAEtD;;;;;GAKG;AACH,MAAM,OAAO,eAAgB,SAAQ,SAAS;IAClC,MAAM,CAAY;IAE5B;QACE,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,YAAY,EAAE,CAAA;IAC9B,CAAC;IAED,MAAM,CAAC,KAAc,EAAE,OAAgB;QACrC,OAAO,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC/B,CAAC;IAED,MAAM,CAAC,KAAc;QACnB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,MAAM,CAAA;IACf,CAAC;IAED,QAAQ,CAAC,IAAY,EAAE,EAAc;QACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAChC,CAAC;IAED,EAAE,CAAC,IAAY,EAAE,EAA8B;QAC7C,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC1B,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,EAA8B;QAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,EAA+B;QAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,EAA8B;QAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,UAAU,CAAC,EAA8B;QACvC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC;IAED,SAAS,CAAC,EAA8B;QACtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;IAED,SAAS,CAAC,EAA8B;QACtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAC3B,CAAC;IAED,QAAQ,CAAC,EAA8B;QACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,GAAG;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAA;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;IAED,YAAY;QACV,OAAO,YAAY,EAAE,CAAA;IACvB,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAY,SAAQ,gBAAgB;IAC/C;;;OAGG;IACH,OAAO;QACL,OAAO,IAAI,eAAe,EAAE,CAAA;IAC9B,CAAC;CACF;AAED,iDAAiD;AACjD,eAAe,WAAW,CAAA;AAE1B,iBAAiB;AACjB,OAAO,EAAE,WAAW,IAAI,UAAU,EAAE,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ai-tests",
|
|
3
|
+
"version": "2.0.1",
|
|
4
|
+
"description": "Test utilities worker - expect, should, assert, describe, it via RPC",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"ai-tests": "./dist/cli.js"
|
|
10
|
+
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts"
|
|
15
|
+
},
|
|
16
|
+
"./worker": {
|
|
17
|
+
"import": "./dist/worker.js",
|
|
18
|
+
"types": "./dist/worker.d.ts"
|
|
19
|
+
},
|
|
20
|
+
"./local": {
|
|
21
|
+
"import": "./dist/local.js",
|
|
22
|
+
"types": "./dist/local.d.ts"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "tsc -p tsconfig.json",
|
|
27
|
+
"dev": "tsc -p tsconfig.json --watch",
|
|
28
|
+
"test": "vitest",
|
|
29
|
+
"typecheck": "tsc --noEmit",
|
|
30
|
+
"lint": "eslint .",
|
|
31
|
+
"clean": "rm -rf dist",
|
|
32
|
+
"deploy": "wrangler deploy"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"chai": "^5.1.0",
|
|
36
|
+
"rpc.do": "^0.1.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@cloudflare/vitest-pool-workers": "^0.8.0",
|
|
40
|
+
"@cloudflare/workers-types": "^4.20250109.0",
|
|
41
|
+
"@types/chai": "^5.2.0",
|
|
42
|
+
"vitest": "^2.1.0"
|
|
43
|
+
},
|
|
44
|
+
"optionalDependencies": {
|
|
45
|
+
"miniflare": "^3.20241106.0"
|
|
46
|
+
},
|
|
47
|
+
"keywords": [
|
|
48
|
+
"ai",
|
|
49
|
+
"test",
|
|
50
|
+
"chai",
|
|
51
|
+
"expect",
|
|
52
|
+
"assert",
|
|
53
|
+
"workers",
|
|
54
|
+
"rpc",
|
|
55
|
+
"primitives"
|
|
56
|
+
],
|
|
57
|
+
"license": "MIT"
|
|
58
|
+
}
|