vitest 0.0.15 → 0.0.16
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/dist/reporters/default.d.ts +13 -8
- package/dist/reporters/default.js +60 -54
- package/dist/run.js +11 -8
- package/dist/types.d.ts +10 -10
- package/index.d.ts +1 -0
- package/package.json +3 -1
|
@@ -1,19 +1,24 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Listr from 'listr';
|
|
2
|
+
import { Reporter, RunnerContext, Task } from '../types';
|
|
3
|
+
interface TaskPromise {
|
|
4
|
+
promise: Promise<void>;
|
|
5
|
+
resolve: () => void;
|
|
6
|
+
reject: (e: unknown) => void;
|
|
7
|
+
}
|
|
2
8
|
export declare class DefaultReporter implements Reporter {
|
|
3
9
|
indent: number;
|
|
4
10
|
start: number;
|
|
5
11
|
end: number;
|
|
12
|
+
listr: Listr | null;
|
|
13
|
+
listrPromise: Promise<void> | null;
|
|
14
|
+
taskMap: Map<Task, TaskPromise>;
|
|
6
15
|
onStart(): void;
|
|
7
|
-
onCollected(): void;
|
|
8
|
-
onSuiteBegin(suite: Suite): void;
|
|
9
|
-
onSuiteEnd(suite: Suite): void;
|
|
10
|
-
onFileBegin(file: File): void;
|
|
11
|
-
onFileEnd(): void;
|
|
12
|
-
onTaskBegin(task: Task): void;
|
|
16
|
+
onCollected(ctx: RunnerContext): void;
|
|
13
17
|
onTaskEnd(task: Task): void;
|
|
14
|
-
onFinished({ files }: RunnerContext): void
|
|
18
|
+
onFinished({ files }: RunnerContext): Promise<void>;
|
|
15
19
|
private getIndent;
|
|
16
20
|
private log;
|
|
17
21
|
private error;
|
|
18
22
|
onSnapshotUpdate(): void;
|
|
19
23
|
}
|
|
24
|
+
export {};
|
|
@@ -1,69 +1,75 @@
|
|
|
1
|
-
import { relative } from 'path';
|
|
2
1
|
import { performance } from 'perf_hooks';
|
|
2
|
+
import { relative } from 'path';
|
|
3
3
|
import c from 'picocolors';
|
|
4
|
-
import
|
|
5
|
-
const
|
|
6
|
-
const CHECK = '✔ ';
|
|
7
|
-
const CROSS = '⤫ ';
|
|
4
|
+
import Listr from 'listr';
|
|
5
|
+
const CROSS = '✖ ';
|
|
8
6
|
export class DefaultReporter {
|
|
9
7
|
constructor() {
|
|
10
8
|
this.indent = 0;
|
|
11
9
|
this.start = 0;
|
|
12
10
|
this.end = 0;
|
|
11
|
+
this.listr = null;
|
|
12
|
+
this.listrPromise = null;
|
|
13
|
+
this.taskMap = new Map();
|
|
13
14
|
}
|
|
14
15
|
onStart() {
|
|
15
16
|
this.indent = 0;
|
|
16
17
|
}
|
|
17
|
-
onCollected() {
|
|
18
|
+
onCollected(ctx) {
|
|
18
19
|
this.start = performance.now();
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
20
|
+
this.taskMap = new Map();
|
|
21
|
+
const tasks = ctx.files.reduce((acc, file) => acc.concat(file.suites.flatMap(i => i.tasks)), []);
|
|
22
|
+
tasks.forEach((t) => {
|
|
23
|
+
const obj = {};
|
|
24
|
+
obj.promise = new Promise((resolve, reject) => {
|
|
25
|
+
obj.resolve = resolve;
|
|
26
|
+
obj.reject = reject;
|
|
27
|
+
});
|
|
28
|
+
this.taskMap.set(t, obj);
|
|
29
|
+
});
|
|
30
|
+
const createTasksListr = (tasks) => {
|
|
31
|
+
return tasks.map((task) => {
|
|
32
|
+
return {
|
|
33
|
+
title: task.name,
|
|
34
|
+
skip: () => task.mode === 'skip',
|
|
35
|
+
task: async () => {
|
|
36
|
+
var _a;
|
|
37
|
+
return await ((_a = this.taskMap.get(task)) === null || _a === void 0 ? void 0 : _a.promise);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
const listrOptions = {
|
|
43
|
+
exitOnError: false,
|
|
44
|
+
};
|
|
45
|
+
this.listr = new Listr(ctx.files.map((file) => {
|
|
46
|
+
return {
|
|
47
|
+
title: relative(process.cwd(), file.filepath),
|
|
48
|
+
task: () => {
|
|
49
|
+
return new Listr(file.suites.flatMap((suite) => {
|
|
50
|
+
if (!suite.name)
|
|
51
|
+
return createTasksListr(suite.tasks);
|
|
52
|
+
return [{
|
|
53
|
+
title: suite.name,
|
|
54
|
+
skip: () => suite.mode !== 'run',
|
|
55
|
+
task: () => new Listr(createTasksListr(suite.tasks), listrOptions),
|
|
56
|
+
}];
|
|
57
|
+
}), listrOptions);
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}), listrOptions);
|
|
61
|
+
this.listrPromise = this.listr.run().catch(() => { });
|
|
46
62
|
}
|
|
47
63
|
onTaskEnd(task) {
|
|
48
|
-
var _a;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
this.
|
|
53
|
-
}
|
|
54
|
-
else if (task.state === 'skip') {
|
|
55
|
-
this.log(c.dim(c.yellow(`${DOT + task.name} (skipped)`)));
|
|
56
|
-
}
|
|
57
|
-
else if (task.state === 'todo') {
|
|
58
|
-
this.log(c.dim(`${DOT + task.name} (todo)`));
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
this.error(`${c.red(`${CROSS}${task.name}`)}`);
|
|
62
|
-
process.exitCode = 1;
|
|
63
|
-
}
|
|
64
|
-
this.indent -= 1;
|
|
64
|
+
var _a, _b;
|
|
65
|
+
if (task.state === 'fail')
|
|
66
|
+
(_a = this.taskMap.get(task)) === null || _a === void 0 ? void 0 : _a.reject(task.error);
|
|
67
|
+
else
|
|
68
|
+
(_b = this.taskMap.get(task)) === null || _b === void 0 ? void 0 : _b.resolve();
|
|
65
69
|
}
|
|
66
|
-
onFinished({ files }) {
|
|
70
|
+
async onFinished({ files }) {
|
|
71
|
+
await this.listrPromise;
|
|
72
|
+
this.log();
|
|
67
73
|
this.end = performance.now();
|
|
68
74
|
const failedFiles = files.filter(i => i.error);
|
|
69
75
|
const tasks = files.reduce((acc, file) => acc.concat(file.suites.flatMap(i => i.tasks)), []);
|
|
@@ -85,14 +91,14 @@ export class DefaultReporter {
|
|
|
85
91
|
this.error(c.bold(`\nFailed Tests (${failed.length})`));
|
|
86
92
|
failed.forEach((task) => {
|
|
87
93
|
var _a;
|
|
88
|
-
this.error(`\n${CROSS + c.inverse(c.red(' FAIL '))} ${[task.suite.name, task.name].filter(Boolean).join(' > ')} ${c.gray(`${(_a = task.file) === null || _a === void 0 ? void 0 : _a.filepath}`)}`);
|
|
94
|
+
this.error(`\n${CROSS + c.inverse(c.red(' FAIL '))} ${[task.suite.name, task.name].filter(Boolean).join(' > ')} ${c.gray(c.dim(`${(_a = task.file) === null || _a === void 0 ? void 0 : _a.filepath}`))}`);
|
|
89
95
|
console.error(task.error || 'Unknown error');
|
|
90
96
|
this.log();
|
|
91
97
|
});
|
|
92
98
|
}
|
|
93
|
-
this.log(c.green(`Passed ${passed.length} / ${runable.length}`));
|
|
99
|
+
this.log(c.bold(c.green(`Passed ${passed.length} / ${runable.length}`)));
|
|
94
100
|
if (failed.length)
|
|
95
|
-
this.log(c.red(`Failed ${failed.length} / ${runable.length}`));
|
|
101
|
+
this.log(c.bold(c.red(`Failed ${failed.length} / ${runable.length}`)));
|
|
96
102
|
if (skipped.length)
|
|
97
103
|
this.log(c.yellow(`Skipped ${skipped.length}`));
|
|
98
104
|
if (todo.length)
|
package/dist/run.js
CHANGED
|
@@ -72,23 +72,26 @@ function interpretOnlyMode(items) {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
export async function runFile(file, ctx) {
|
|
75
|
-
var _a, _b
|
|
75
|
+
var _a, _b;
|
|
76
76
|
const { reporter } = ctx;
|
|
77
77
|
const runableSuites = file.suites.filter(i => i.mode === 'run');
|
|
78
78
|
if (runableSuites.length === 0)
|
|
79
79
|
return;
|
|
80
80
|
await ((_a = reporter.onFileBegin) === null || _a === void 0 ? void 0 : _a.call(reporter, file, ctx));
|
|
81
81
|
await beforeFileHook.fire(file);
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
// TODO: support toggling parallel or serial
|
|
83
|
+
await Promise.all(file.suites.map(async (suite) => {
|
|
84
|
+
var _a, _b;
|
|
85
|
+
await ((_a = reporter.onSuiteBegin) === null || _a === void 0 ? void 0 : _a.call(reporter, suite, ctx));
|
|
84
86
|
await beforeSuiteHook.fire(suite);
|
|
85
|
-
|
|
86
|
-
|
|
87
|
+
await Promise.all(suite.tasks.map(i => runTask(i, ctx)));
|
|
88
|
+
// for (const t of suite.tasks)
|
|
89
|
+
// await runTask(t, ctx)
|
|
87
90
|
await afterSuiteHook.fire(suite);
|
|
88
|
-
await ((
|
|
89
|
-
}
|
|
91
|
+
await ((_b = reporter.onSuiteEnd) === null || _b === void 0 ? void 0 : _b.call(reporter, suite, ctx));
|
|
92
|
+
}));
|
|
90
93
|
await afterFileHook.fire(file);
|
|
91
|
-
await ((
|
|
94
|
+
await ((_b = reporter.onFileEnd) === null || _b === void 0 ? void 0 : _b.call(reporter, file, ctx));
|
|
92
95
|
}
|
|
93
96
|
export async function run(config) {
|
|
94
97
|
var _a, _b, _c, _d;
|
package/dist/types.d.ts
CHANGED
|
@@ -71,14 +71,14 @@ export interface GlobalContext {
|
|
|
71
71
|
currentSuite: SuiteCollector | null;
|
|
72
72
|
}
|
|
73
73
|
export interface Reporter {
|
|
74
|
-
onStart
|
|
75
|
-
onCollected
|
|
76
|
-
onFinished
|
|
77
|
-
onSuiteBegin
|
|
78
|
-
onSuiteEnd
|
|
79
|
-
onFileBegin
|
|
80
|
-
onFileEnd
|
|
81
|
-
onTaskBegin
|
|
82
|
-
onTaskEnd
|
|
83
|
-
onSnapshotUpdate
|
|
74
|
+
onStart?: (userOptions: Config) => Awaitable<void>;
|
|
75
|
+
onCollected?: (ctx: RunnerContext) => Awaitable<void>;
|
|
76
|
+
onFinished?: (ctx: RunnerContext) => Awaitable<void>;
|
|
77
|
+
onSuiteBegin?: (suite: Suite, ctx: RunnerContext) => Awaitable<void>;
|
|
78
|
+
onSuiteEnd?: (suite: Suite, ctx: RunnerContext) => Awaitable<void>;
|
|
79
|
+
onFileBegin?: (file: File, ctx: RunnerContext) => Awaitable<void>;
|
|
80
|
+
onFileEnd?: (file: File, ctx: RunnerContext) => Awaitable<void>;
|
|
81
|
+
onTaskBegin?: (task: Task, ctx: RunnerContext) => Awaitable<void>;
|
|
82
|
+
onTaskEnd?: (task: Task, ctx: RunnerContext) => Awaitable<void>;
|
|
83
|
+
onSnapshotUpdate?: () => Awaitable<void>;
|
|
84
84
|
}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './dist/index'
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vitest",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.16",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"homepage": "https://github.com/antfu/vitest#readme",
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
"jest-snapshot": "^27.4.2",
|
|
54
54
|
"jest-util": "^27.4.2",
|
|
55
55
|
"jsdom": "^19.0.0",
|
|
56
|
+
"listr": "^0.14.3",
|
|
56
57
|
"minimist": "^1.2.5",
|
|
57
58
|
"ora": "^6.0.1",
|
|
58
59
|
"picocolors": "^1.0.0",
|
|
@@ -63,6 +64,7 @@
|
|
|
63
64
|
"@antfu/eslint-config": "^0.11.1",
|
|
64
65
|
"@antfu/ni": "^0.11.0",
|
|
65
66
|
"@types/jsdom": "^16.2.13",
|
|
67
|
+
"@types/listr": "^0.14.4",
|
|
66
68
|
"@types/minimist": "^1.2.2",
|
|
67
69
|
"@types/node": "^16.11.11",
|
|
68
70
|
"@types/sinon": "^10.0.6",
|