@japa/runner 3.0.0-8 → 3.0.0-9
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/build/examples/dot.d.ts +1 -0
- package/build/examples/dot.js +11 -0
- package/build/examples/ndjson.d.ts +1 -0
- package/build/examples/ndjson.js +11 -0
- package/build/examples/spec.d.ts +1 -0
- package/build/examples/spec.js +11 -0
- package/build/factories/create_diverse_tests.d.ts +6 -0
- package/build/factories/create_diverse_tests.js +106 -0
- package/build/factories/main.d.ts +5 -42
- package/build/factories/main.js +24 -208
- package/build/factories/runner.d.ts +26 -0
- package/build/factories/runner.js +93 -0
- package/build/index.d.ts +9 -14
- package/build/index.js +202 -237
- package/build/modules/core/main.d.ts +63 -3
- package/build/modules/core/main.js +121 -21
- package/build/modules/core/reporters/base.d.ts +41 -0
- package/build/modules/core/reporters/base.js +183 -0
- package/build/modules/core/types.d.ts +5 -0
- package/build/modules/core/types.js +9 -0
- package/build/src/cli_parser.d.ts +14 -0
- package/build/src/cli_parser.js +75 -0
- package/build/src/config_manager.d.ts +18 -0
- package/build/src/config_manager.js +168 -0
- package/build/src/create_test.d.ts +21 -0
- package/build/src/create_test.js +53 -0
- package/build/src/debug.d.ts +3 -0
- package/build/src/debug.js +10 -0
- package/build/src/exceptions_manager.d.ts +19 -0
- package/build/src/exceptions_manager.js +85 -0
- package/build/src/files_manager.d.ts +18 -0
- package/build/src/files_manager.js +57 -0
- package/build/src/helpers.d.ts +15 -0
- package/build/src/helpers.js +34 -0
- package/build/src/hooks.d.ts +20 -0
- package/build/src/hooks.js +46 -0
- package/build/src/planner.d.ts +25 -0
- package/build/src/planner.js +98 -0
- package/build/src/plugins/retry.d.ts +20 -0
- package/build/src/plugins/retry.js +66 -0
- package/build/src/reporters/dot.d.ts +15 -0
- package/build/src/reporters/dot.js +41 -0
- package/build/src/reporters/main.d.ts +4 -9
- package/build/src/reporters/main.js +37 -11
- package/build/src/reporters/ndjson.d.ts +15 -0
- package/build/src/reporters/ndjson.js +86 -0
- package/build/src/reporters/spec.d.ts +13 -0
- package/build/src/reporters/spec.js +152 -0
- package/build/src/types.d.ts +19 -23
- package/build/src/types.js +9 -14
- package/build/src/validator.d.ts +30 -0
- package/build/src/validator.js +85 -0
- package/build/tests/base_reporter.spec.d.ts +1 -0
- package/build/tests/base_reporter.spec.js +111 -0
- package/build/tests/cli_parser.spec.d.ts +1 -0
- package/build/tests/cli_parser.spec.js +265 -0
- package/build/tests/config_manager.spec.d.ts +1 -0
- package/build/tests/config_manager.spec.js +741 -0
- package/build/tests/core.spec.d.ts +1 -0
- package/build/tests/core.spec.js +31 -0
- package/build/tests/files_manager.spec.d.ts +1 -0
- package/build/tests/files_manager.spec.js +153 -0
- package/build/tests/planner.spec.d.ts +1 -0
- package/build/tests/planner.spec.js +510 -0
- package/build/tests/runner.spec.d.ts +1 -0
- package/build/tests/runner.spec.js +442 -0
- package/build/tests_helpers/main.d.ts +7 -0
- package/build/tests_helpers/main.js +34 -0
- package/package.json +2 -17
- package/build/chunk-7THDHQFT.js +0 -283
- package/build/chunk-HN4AVHWN.js +0 -17
- package/build/chunk-MCOW34SG.js +0 -269
- package/build/chunk-W5IABAQU.js +0 -502
- package/build/main-63126780.d.ts +0 -109
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { dot } from '../src/reporters/main.js';
|
|
2
|
+
import { createDiverseTests, runner } from '../factories/main.js';
|
|
3
|
+
await runner()
|
|
4
|
+
.configure({
|
|
5
|
+
files: [],
|
|
6
|
+
reporters: {
|
|
7
|
+
list: [dot()],
|
|
8
|
+
activated: ['dot'],
|
|
9
|
+
},
|
|
10
|
+
})
|
|
11
|
+
.runSuites(createDiverseTests);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ndjson } from '../src/reporters/main.js';
|
|
2
|
+
import { createDiverseTests, runner } from '../factories/main.js';
|
|
3
|
+
await runner()
|
|
4
|
+
.configure({
|
|
5
|
+
files: [],
|
|
6
|
+
reporters: {
|
|
7
|
+
list: [ndjson()],
|
|
8
|
+
activated: ['ndjson'],
|
|
9
|
+
},
|
|
10
|
+
})
|
|
11
|
+
.runSuites(createDiverseTests);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { spec } from '../src/reporters/main.js';
|
|
2
|
+
import { createDiverseTests, runner } from '../factories/main.js';
|
|
3
|
+
await runner()
|
|
4
|
+
.configure({
|
|
5
|
+
files: [],
|
|
6
|
+
reporters: {
|
|
7
|
+
list: [spec()],
|
|
8
|
+
activated: ['spec'],
|
|
9
|
+
},
|
|
10
|
+
})
|
|
11
|
+
.runSuites(createDiverseTests);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Suite, Emitter, Refiner } from '../modules/core/main.js';
|
|
2
|
+
/**
|
|
3
|
+
* Returns an array of suites with dummy tests reproducting
|
|
4
|
+
* different test behavior
|
|
5
|
+
*/
|
|
6
|
+
export declare function createDiverseTests(emitter: Emitter, refiner: Refiner, file?: string): Suite[];
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { Suite } from '../modules/core/main.js';
|
|
3
|
+
import { createTest, createTestGroup } from '../src/create_test.js';
|
|
4
|
+
/**
|
|
5
|
+
* Creates a unit tests suite with bunch of dummy tests
|
|
6
|
+
* reproducing different tests behavior
|
|
7
|
+
*/
|
|
8
|
+
function createUnitTestsSuite(emitter, refiner, file) {
|
|
9
|
+
const suite = new Suite('unit', emitter, refiner);
|
|
10
|
+
const group = createTestGroup('Maths#add', emitter, refiner, {
|
|
11
|
+
suite,
|
|
12
|
+
file,
|
|
13
|
+
});
|
|
14
|
+
createTest('A top level test inside a suite', emitter, refiner, {
|
|
15
|
+
suite,
|
|
16
|
+
file,
|
|
17
|
+
}).run(() => { });
|
|
18
|
+
createTest('add two numbers', emitter, refiner, { group, file }).run(() => {
|
|
19
|
+
assert.equal(2 + 2, 4);
|
|
20
|
+
});
|
|
21
|
+
createTest('add three numbers', emitter, refiner, {
|
|
22
|
+
group,
|
|
23
|
+
file,
|
|
24
|
+
}).run(() => {
|
|
25
|
+
assert.equal(2 + 2 + 2, 6);
|
|
26
|
+
});
|
|
27
|
+
createTest('add group of numbers', emitter, refiner, { group, file });
|
|
28
|
+
createTest('use math.js lib', emitter, refiner, { group, file }).skip(true, 'Library work pending');
|
|
29
|
+
createTest('add multiple numbers', emitter, refiner, {
|
|
30
|
+
file,
|
|
31
|
+
group,
|
|
32
|
+
}).run(() => {
|
|
33
|
+
assert.equal(2 + 2 + 2 + 2, 6);
|
|
34
|
+
});
|
|
35
|
+
createTest('add floating numbers', emitter, refiner, { group, file })
|
|
36
|
+
.run(() => {
|
|
37
|
+
assert.equal(2 + 2.2 + 2.1, 6);
|
|
38
|
+
})
|
|
39
|
+
.fails('Have to add support for floating numbers');
|
|
40
|
+
createTest('A test with an error that is not an AssertionError', emitter, refiner, {
|
|
41
|
+
group,
|
|
42
|
+
file,
|
|
43
|
+
}).run(() => {
|
|
44
|
+
throw new Error('This is an error');
|
|
45
|
+
});
|
|
46
|
+
return suite;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Creates a unit functional suite with bunch of dummy tests
|
|
50
|
+
* reproducing different tests behavior
|
|
51
|
+
*/
|
|
52
|
+
function createFunctionalTestsSuite(emitter, refiner, file) {
|
|
53
|
+
const suite = new Suite('functional', emitter, refiner);
|
|
54
|
+
const group = createTestGroup('Users/store', emitter, refiner, {
|
|
55
|
+
suite,
|
|
56
|
+
file: file,
|
|
57
|
+
});
|
|
58
|
+
createTest('Validate user data', emitter, refiner, {
|
|
59
|
+
group,
|
|
60
|
+
file: file,
|
|
61
|
+
}).run(() => { });
|
|
62
|
+
createTest('Disallow duplicate emails', emitter, refiner, {
|
|
63
|
+
group,
|
|
64
|
+
file: file,
|
|
65
|
+
}).run(() => { });
|
|
66
|
+
createTest('Disallow duplicate emails across tenants', emitter, refiner, {
|
|
67
|
+
group,
|
|
68
|
+
file: file,
|
|
69
|
+
}).run(() => {
|
|
70
|
+
const users = ['', ''];
|
|
71
|
+
assert.equal(users.length, 1);
|
|
72
|
+
});
|
|
73
|
+
createTest('Normalize email before persisting it', emitter, refiner, {
|
|
74
|
+
group,
|
|
75
|
+
file: file,
|
|
76
|
+
}).skip(true, 'Have to build a normalizer');
|
|
77
|
+
createTest('Send email verification mail', emitter, refiner, {
|
|
78
|
+
group,
|
|
79
|
+
file: file,
|
|
80
|
+
});
|
|
81
|
+
const usersListGroup = createTestGroup('Users/list', emitter, refiner, {
|
|
82
|
+
suite,
|
|
83
|
+
file: file,
|
|
84
|
+
});
|
|
85
|
+
usersListGroup.setup(() => {
|
|
86
|
+
throw new Error('Unable to cleanup database');
|
|
87
|
+
});
|
|
88
|
+
createTest('A test that will never because the group hooks fails', emitter, refiner, {
|
|
89
|
+
group: usersListGroup,
|
|
90
|
+
});
|
|
91
|
+
createTest('A top level test inside functional suite', emitter, refiner, {
|
|
92
|
+
suite,
|
|
93
|
+
file: file,
|
|
94
|
+
}).run(() => { });
|
|
95
|
+
return suite;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Returns an array of suites with dummy tests reproducting
|
|
99
|
+
* different test behavior
|
|
100
|
+
*/
|
|
101
|
+
export function createDiverseTests(emitter, refiner, file) {
|
|
102
|
+
return [
|
|
103
|
+
createUnitTestsSuite(emitter, refiner, file),
|
|
104
|
+
createFunctionalTestsSuite(emitter, refiner, file),
|
|
105
|
+
];
|
|
106
|
+
}
|
|
@@ -1,45 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { Config } from '../src/types.js';
|
|
4
|
-
import { Emitter, Refiner } from '@japa/core';
|
|
5
|
-
import '@poppinss/hooks/types';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Runner factory exposes the API to run dummy suites, groups and tests.
|
|
9
|
-
* You might want to use the factory for testing reporters and
|
|
10
|
-
* plugins usage
|
|
11
|
-
*/
|
|
12
|
-
declare class RunnerFactory {
|
|
13
|
-
#private;
|
|
14
|
-
/**
|
|
15
|
-
* Configure runner
|
|
16
|
-
*/
|
|
17
|
-
configure(config: Config, argv?: string[]): this;
|
|
18
|
-
/**
|
|
19
|
-
* Define a custom emitter instance to use
|
|
20
|
-
*/
|
|
21
|
-
useEmitter(emitter: Emitter): this;
|
|
22
|
-
/**
|
|
23
|
-
* Run a test using the runner
|
|
24
|
-
*/
|
|
25
|
-
runTest(title: string, callback: TestExecutor<TestContext, undefined>): Promise<RunnerSummary>;
|
|
26
|
-
/**
|
|
27
|
-
* Run dummy tests. You might use
|
|
28
|
-
*/
|
|
29
|
-
runSuites(suites: (emitter: Emitter, refiner: Refiner, file?: string) => Suite[]): Promise<RunnerSummary>;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Returns an array of suites with dummy tests reproducting
|
|
34
|
-
* different test behavior
|
|
35
|
-
*/
|
|
36
|
-
declare function createDiverseTests(emitter: Emitter, refiner: Refiner, file?: string): Suite[];
|
|
37
|
-
|
|
1
|
+
import { ReporterContract } from '../src/types.js';
|
|
2
|
+
import { RunnerFactory } from './runner.js';
|
|
38
3
|
/**
|
|
39
4
|
* Create an instance of the runner factory
|
|
40
5
|
*/
|
|
41
|
-
declare const runner: () => RunnerFactory;
|
|
42
|
-
|
|
43
|
-
declare const syncReporter: ReporterContract;
|
|
44
|
-
|
|
45
|
-
export { createDiverseTests, runner, syncReporter };
|
|
6
|
+
export declare const runner: () => RunnerFactory;
|
|
7
|
+
export { createDiverseTests } from './create_diverse_tests.js';
|
|
8
|
+
export declare const syncReporter: ReporterContract;
|
package/build/factories/main.js
CHANGED
|
@@ -1,209 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
import
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
} from
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return this.#config.refiner;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Registers plugins
|
|
29
|
-
*/
|
|
30
|
-
async #registerPlugins(runner2) {
|
|
31
|
-
for (let plugin of this.#config.plugins) {
|
|
32
|
-
await plugin({
|
|
33
|
-
config: this.#config,
|
|
34
|
-
runner: runner2,
|
|
35
|
-
emitter: this.#emitter,
|
|
36
|
-
cliArgs: this.#cliArgs
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Configure runner
|
|
42
|
-
*/
|
|
43
|
-
configure(config, argv) {
|
|
44
|
-
this.#cliArgs = new CliParser().parse(argv || []);
|
|
45
|
-
this.#config = new ConfigManager(config, this.#cliArgs).hydrate();
|
|
46
|
-
return this;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Define a custom emitter instance to use
|
|
50
|
-
*/
|
|
51
|
-
useEmitter(emitter) {
|
|
52
|
-
this.#emitter = emitter;
|
|
53
|
-
return this;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Run a test using the runner
|
|
57
|
-
*/
|
|
58
|
-
async runTest(title, callback) {
|
|
59
|
-
return this.runSuites((emitter, refiner, file) => {
|
|
60
|
-
const defaultSuite = new Suite("default", emitter, refiner);
|
|
61
|
-
createTest(title, emitter, refiner, {
|
|
62
|
-
suite: defaultSuite,
|
|
63
|
-
file
|
|
64
|
-
}).run(callback);
|
|
65
|
-
return [defaultSuite];
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Run dummy tests. You might use
|
|
70
|
-
*/
|
|
71
|
-
async runSuites(suites) {
|
|
72
|
-
const runner2 = new Runner(this.#emitter);
|
|
73
|
-
await this.#registerPlugins(runner2);
|
|
74
|
-
const { config, reporters, refinerFilters } = await new Planner(this.#config).plan();
|
|
75
|
-
const globalHooks = new GlobalHooks();
|
|
76
|
-
globalHooks.apply(config);
|
|
77
|
-
reporters.forEach((reporter) => {
|
|
78
|
-
runner2.registerReporter(reporter);
|
|
79
|
-
});
|
|
80
|
-
refinerFilters.forEach((filter) => {
|
|
81
|
-
config.refiner.add(filter.layer, filter.filters);
|
|
82
|
-
});
|
|
83
|
-
suites(this.#emitter, this.#refiner, this.#file).forEach((suite) => runner2.add(suite));
|
|
84
|
-
await globalHooks.setup(runner2);
|
|
85
|
-
await runner2.start();
|
|
86
|
-
await runner2.exec();
|
|
87
|
-
await runner2.end();
|
|
88
|
-
await globalHooks.teardown(null, runner2);
|
|
89
|
-
return runner2.getSummary();
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
// factories/create_diverse_tests.ts
|
|
94
|
-
import assert from "node:assert";
|
|
95
|
-
function createUnitTestsSuite(emitter, refiner, file) {
|
|
96
|
-
const suite = new Suite("unit", emitter, refiner);
|
|
97
|
-
const group = createTestGroup("Maths#add", emitter, refiner, {
|
|
98
|
-
suite,
|
|
99
|
-
file
|
|
100
|
-
});
|
|
101
|
-
createTest("A top level test inside a suite", emitter, refiner, {
|
|
102
|
-
suite,
|
|
103
|
-
file
|
|
104
|
-
}).run(() => {
|
|
105
|
-
});
|
|
106
|
-
createTest("add two numbers", emitter, refiner, { group, file }).run(() => {
|
|
107
|
-
assert.equal(2 + 2, 4);
|
|
108
|
-
});
|
|
109
|
-
createTest("add three numbers", emitter, refiner, {
|
|
110
|
-
group,
|
|
111
|
-
file
|
|
112
|
-
}).run(() => {
|
|
113
|
-
assert.equal(2 + 2 + 2, 6);
|
|
114
|
-
});
|
|
115
|
-
createTest("add group of numbers", emitter, refiner, { group, file });
|
|
116
|
-
createTest("use math.js lib", emitter, refiner, { group, file }).skip(
|
|
117
|
-
true,
|
|
118
|
-
"Library work pending"
|
|
119
|
-
);
|
|
120
|
-
createTest("add multiple numbers", emitter, refiner, {
|
|
121
|
-
file,
|
|
122
|
-
group
|
|
123
|
-
}).run(() => {
|
|
124
|
-
assert.equal(2 + 2 + 2 + 2, 6);
|
|
125
|
-
});
|
|
126
|
-
createTest("add floating numbers", emitter, refiner, { group, file }).run(() => {
|
|
127
|
-
assert.equal(2 + 2.2 + 2.1, 6);
|
|
128
|
-
}).fails("Have to add support for floating numbers");
|
|
129
|
-
createTest("A test with an error that is not an AssertionError", emitter, refiner, {
|
|
130
|
-
group,
|
|
131
|
-
file
|
|
132
|
-
}).run(() => {
|
|
133
|
-
throw new Error("This is an error");
|
|
134
|
-
});
|
|
135
|
-
return suite;
|
|
136
|
-
}
|
|
137
|
-
function createFunctionalTestsSuite(emitter, refiner, file) {
|
|
138
|
-
const suite = new Suite("functional", emitter, refiner);
|
|
139
|
-
const group = createTestGroup("Users/store", emitter, refiner, {
|
|
140
|
-
suite,
|
|
141
|
-
file
|
|
142
|
-
});
|
|
143
|
-
createTest("Validate user data", emitter, refiner, {
|
|
144
|
-
group,
|
|
145
|
-
file
|
|
146
|
-
}).run(() => {
|
|
147
|
-
});
|
|
148
|
-
createTest("Disallow duplicate emails", emitter, refiner, {
|
|
149
|
-
group,
|
|
150
|
-
file
|
|
151
|
-
}).run(() => {
|
|
152
|
-
});
|
|
153
|
-
createTest("Disallow duplicate emails across tenants", emitter, refiner, {
|
|
154
|
-
group,
|
|
155
|
-
file
|
|
156
|
-
}).run(() => {
|
|
157
|
-
const users = ["", ""];
|
|
158
|
-
assert.equal(users.length, 1);
|
|
159
|
-
});
|
|
160
|
-
createTest("Normalize email before persisting it", emitter, refiner, {
|
|
161
|
-
group,
|
|
162
|
-
file
|
|
163
|
-
}).skip(true, "Have to build a normalizer");
|
|
164
|
-
createTest("Send email verification mail", emitter, refiner, {
|
|
165
|
-
group,
|
|
166
|
-
file
|
|
167
|
-
});
|
|
168
|
-
const usersListGroup = createTestGroup("Users/list", emitter, refiner, {
|
|
169
|
-
suite,
|
|
170
|
-
file
|
|
171
|
-
});
|
|
172
|
-
usersListGroup.setup(() => {
|
|
173
|
-
throw new Error("Unable to cleanup database");
|
|
174
|
-
});
|
|
175
|
-
createTest("A test that will never because the group hooks fails", emitter, refiner, {
|
|
176
|
-
group: usersListGroup
|
|
177
|
-
});
|
|
178
|
-
createTest("A top level test inside functional suite", emitter, refiner, {
|
|
179
|
-
suite,
|
|
180
|
-
file
|
|
181
|
-
}).run(() => {
|
|
182
|
-
});
|
|
183
|
-
return suite;
|
|
184
|
-
}
|
|
185
|
-
function createDiverseTests(emitter, refiner, file) {
|
|
186
|
-
return [
|
|
187
|
-
createUnitTestsSuite(emitter, refiner, file),
|
|
188
|
-
createFunctionalTestsSuite(emitter, refiner, file)
|
|
189
|
-
];
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// factories/main.ts
|
|
193
|
-
var runner = () => new RunnerFactory();
|
|
194
|
-
var syncReporter = {
|
|
195
|
-
name: "sync",
|
|
196
|
-
handler(r, emitter) {
|
|
197
|
-
emitter.on("runner:end", function() {
|
|
198
|
-
const summary = r.getSummary();
|
|
199
|
-
if (summary.hasError) {
|
|
200
|
-
throw summary.failureTree[0].children[0].errors[0].error;
|
|
201
|
-
}
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
};
|
|
205
|
-
export {
|
|
206
|
-
createDiverseTests,
|
|
207
|
-
runner,
|
|
208
|
-
syncReporter
|
|
1
|
+
/*
|
|
2
|
+
* @japa/runner
|
|
3
|
+
*
|
|
4
|
+
* (c) Japa
|
|
5
|
+
*
|
|
6
|
+
* For the full copyright and license information, please view the LICENSE
|
|
7
|
+
* file that was distributed with this source code.
|
|
8
|
+
*/
|
|
9
|
+
import { RunnerFactory } from './runner.js';
|
|
10
|
+
/**
|
|
11
|
+
* Create an instance of the runner factory
|
|
12
|
+
*/
|
|
13
|
+
export const runner = () => new RunnerFactory();
|
|
14
|
+
export { createDiverseTests } from './create_diverse_tests.js';
|
|
15
|
+
export const syncReporter = {
|
|
16
|
+
name: 'sync',
|
|
17
|
+
handler(r, emitter) {
|
|
18
|
+
emitter.on('runner:end', function () {
|
|
19
|
+
const summary = r.getSummary();
|
|
20
|
+
if (summary.hasError) {
|
|
21
|
+
throw summary.failureTree[0].children[0].errors[0].error;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
},
|
|
209
25
|
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Suite, Emitter, TestContext, Refiner } from '../modules/core/main.js';
|
|
2
|
+
import type { Config, TestExecutor, RunnerSummary } from '../src/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Runner factory exposes the API to run dummy suites, groups and tests.
|
|
5
|
+
* You might want to use the factory for testing reporters and
|
|
6
|
+
* plugins usage
|
|
7
|
+
*/
|
|
8
|
+
export declare class RunnerFactory {
|
|
9
|
+
#private;
|
|
10
|
+
/**
|
|
11
|
+
* Configure runner
|
|
12
|
+
*/
|
|
13
|
+
configure(config: Config, argv?: string[]): this;
|
|
14
|
+
/**
|
|
15
|
+
* Define a custom emitter instance to use
|
|
16
|
+
*/
|
|
17
|
+
useEmitter(emitter: Emitter): this;
|
|
18
|
+
/**
|
|
19
|
+
* Run a test using the runner
|
|
20
|
+
*/
|
|
21
|
+
runTest(title: string, callback: TestExecutor<TestContext, undefined>): Promise<RunnerSummary>;
|
|
22
|
+
/**
|
|
23
|
+
* Run dummy tests. You might use
|
|
24
|
+
*/
|
|
25
|
+
runSuites(suites: (emitter: Emitter, refiner: Refiner, file?: string) => Suite[]): Promise<RunnerSummary>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @japa/runner
|
|
3
|
+
*
|
|
4
|
+
* (c) Japa
|
|
5
|
+
*
|
|
6
|
+
* For the full copyright and license information, please view the LICENSE
|
|
7
|
+
* file that was distributed with this source code.
|
|
8
|
+
*/
|
|
9
|
+
import { fileURLToPath } from 'node:url';
|
|
10
|
+
import { Planner } from '../src/planner.js';
|
|
11
|
+
import { GlobalHooks } from '../src/hooks.js';
|
|
12
|
+
import { CliParser } from '../src/cli_parser.js';
|
|
13
|
+
import { createTest } from '../src/create_test.js';
|
|
14
|
+
import { ConfigManager } from '../src/config_manager.js';
|
|
15
|
+
import { Suite, Runner, Emitter } from '../modules/core/main.js';
|
|
16
|
+
/**
|
|
17
|
+
* Runner factory exposes the API to run dummy suites, groups and tests.
|
|
18
|
+
* You might want to use the factory for testing reporters and
|
|
19
|
+
* plugins usage
|
|
20
|
+
*/
|
|
21
|
+
export class RunnerFactory {
|
|
22
|
+
#emitter = new Emitter();
|
|
23
|
+
#config;
|
|
24
|
+
#cliArgs;
|
|
25
|
+
#file = fileURLToPath(import.meta.url);
|
|
26
|
+
get #refiner() {
|
|
27
|
+
return this.#config.refiner;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Registers plugins
|
|
31
|
+
*/
|
|
32
|
+
async #registerPlugins(runner) {
|
|
33
|
+
for (let plugin of this.#config.plugins) {
|
|
34
|
+
await plugin({
|
|
35
|
+
config: this.#config,
|
|
36
|
+
runner,
|
|
37
|
+
emitter: this.#emitter,
|
|
38
|
+
cliArgs: this.#cliArgs,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Configure runner
|
|
44
|
+
*/
|
|
45
|
+
configure(config, argv) {
|
|
46
|
+
this.#cliArgs = new CliParser().parse(argv || []);
|
|
47
|
+
this.#config = new ConfigManager(config, this.#cliArgs).hydrate();
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Define a custom emitter instance to use
|
|
52
|
+
*/
|
|
53
|
+
useEmitter(emitter) {
|
|
54
|
+
this.#emitter = emitter;
|
|
55
|
+
return this;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Run a test using the runner
|
|
59
|
+
*/
|
|
60
|
+
async runTest(title, callback) {
|
|
61
|
+
return this.runSuites((emitter, refiner, file) => {
|
|
62
|
+
const defaultSuite = new Suite('default', emitter, refiner);
|
|
63
|
+
createTest(title, emitter, refiner, {
|
|
64
|
+
suite: defaultSuite,
|
|
65
|
+
file: file,
|
|
66
|
+
}).run(callback);
|
|
67
|
+
return [defaultSuite];
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Run dummy tests. You might use
|
|
72
|
+
*/
|
|
73
|
+
async runSuites(suites) {
|
|
74
|
+
const runner = new Runner(this.#emitter);
|
|
75
|
+
await this.#registerPlugins(runner);
|
|
76
|
+
const { config, reporters, refinerFilters } = await new Planner(this.#config).plan();
|
|
77
|
+
const globalHooks = new GlobalHooks();
|
|
78
|
+
globalHooks.apply(config);
|
|
79
|
+
reporters.forEach((reporter) => {
|
|
80
|
+
runner.registerReporter(reporter);
|
|
81
|
+
});
|
|
82
|
+
refinerFilters.forEach((filter) => {
|
|
83
|
+
config.refiner.add(filter.layer, filter.filters);
|
|
84
|
+
});
|
|
85
|
+
suites(this.#emitter, this.#refiner, this.#file).forEach((suite) => runner.add(suite));
|
|
86
|
+
await globalHooks.setup(runner);
|
|
87
|
+
await runner.start();
|
|
88
|
+
await runner.exec();
|
|
89
|
+
await runner.end();
|
|
90
|
+
await globalHooks.teardown(null, runner);
|
|
91
|
+
return runner.getSummary();
|
|
92
|
+
}
|
|
93
|
+
}
|
package/build/index.d.ts
CHANGED
|
@@ -1,26 +1,23 @@
|
|
|
1
|
-
import { TestExecutor } from '@japa/core/types';
|
|
2
|
-
import { Config } from './src/types.js';
|
|
3
|
-
import {
|
|
4
|
-
import '@poppinss/hooks/types';
|
|
5
|
-
import '@japa/core';
|
|
6
|
-
|
|
1
|
+
import type { TestExecutor } from '@japa/core/types';
|
|
2
|
+
import type { Config } from './src/types.js';
|
|
3
|
+
import { Group, Test, TestContext } from './modules/core/main.js';
|
|
7
4
|
/**
|
|
8
5
|
* Create a Japa test. Defining a test without the callback
|
|
9
6
|
* will create a todo test.
|
|
10
7
|
*/
|
|
11
|
-
declare function test(title: string, callback?: TestExecutor<TestContext, undefined>): Test<undefined>;
|
|
12
|
-
declare namespace test {
|
|
8
|
+
export declare function test(title: string, callback?: TestExecutor<TestContext, undefined>): Test<undefined>;
|
|
9
|
+
export declare namespace test {
|
|
13
10
|
var group: (title: string, callback: (group: Group) => void) => void;
|
|
14
11
|
}
|
|
15
12
|
/**
|
|
16
13
|
* Get the test of currently running test
|
|
17
14
|
*/
|
|
18
|
-
declare function getActiveTest(): Test<any> | undefined;
|
|
15
|
+
export declare function getActiveTest(): Test<any> | undefined;
|
|
19
16
|
/**
|
|
20
17
|
* Make Japa process command line arguments. Later the parsed output
|
|
21
18
|
* will be used by Japa to compute the configuration
|
|
22
19
|
*/
|
|
23
|
-
declare function processCLIArgs(argv: string[]): void;
|
|
20
|
+
export declare function processCLIArgs(argv: string[]): void;
|
|
24
21
|
/**
|
|
25
22
|
* Configure the tests runner with inline configuration. You must
|
|
26
23
|
* call configure method before the run method.
|
|
@@ -28,11 +25,9 @@ declare function processCLIArgs(argv: string[]): void;
|
|
|
28
25
|
* Do note: The CLI flags will overwrite the options provided
|
|
29
26
|
* to the configure method.
|
|
30
27
|
*/
|
|
31
|
-
declare function configure(options: Config): void;
|
|
28
|
+
export declare function configure(options: Config): void;
|
|
32
29
|
/**
|
|
33
30
|
* Execute Japa tests. Calling this function will import the test
|
|
34
31
|
* files behind the scenes
|
|
35
32
|
*/
|
|
36
|
-
declare function run(): Promise<void>;
|
|
37
|
-
|
|
38
|
-
export { configure, getActiveTest, processCLIArgs, run, test };
|
|
33
|
+
export declare function run(): Promise<void>;
|