@japa/runner 4.4.1 → 4.5.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 +0 -61
- package/build/chunk-2KG3PWR4.js +17 -0
- package/build/chunk-L7YZLDZD.js +340 -0
- package/build/chunk-RFKFNXTE.js +347 -0
- package/build/chunk-WNJXMFYL.js +520 -0
- package/build/factories/create_dummy_tests.d.ts +1 -1
- package/build/factories/main.d.ts +1 -1
- package/build/factories/main.js +232 -182
- package/build/factories/runner.d.ts +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.js +278 -214
- package/build/modules/core/main.js +21 -2
- package/build/modules/core/reporters/base.d.ts +1 -1
- package/build/src/create_test.d.ts +1 -1
- package/build/src/debug.d.ts +1 -1
- package/build/src/helpers.d.ts +2 -2
- package/build/src/hooks.d.ts +1 -1
- package/build/src/plugins/main.js +28 -20
- package/build/src/reporters/main.js +14 -3
- package/build/src/reporters/spec.d.ts +1 -1
- package/build/src/types.js +14 -7
- package/build/src/validator.d.ts +1 -1
- package/package.json +32 -29
- package/build/create_test-CuTGNCAf.js +0 -353
- package/build/helpers-BlHaYYTh.js +0 -241
- package/build/main-CB1nhl6c.js +0 -336
package/build/factories/main.js
CHANGED
|
@@ -1,191 +1,241 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import {
|
|
2
|
+
CliParser,
|
|
3
|
+
ConfigManager,
|
|
4
|
+
GlobalHooks,
|
|
5
|
+
Planner,
|
|
6
|
+
createTest,
|
|
7
|
+
createTestGroup
|
|
8
|
+
} from "../chunk-WNJXMFYL.js";
|
|
9
|
+
import "../chunk-RFKFNXTE.js";
|
|
10
|
+
import {
|
|
11
|
+
Emitter,
|
|
12
|
+
Runner,
|
|
13
|
+
Suite
|
|
14
|
+
} from "../chunk-L7YZLDZD.js";
|
|
15
|
+
import "../chunk-2KG3PWR4.js";
|
|
16
|
+
|
|
17
|
+
// factories/runner.ts
|
|
18
|
+
import { fileURLToPath } from "url";
|
|
6
19
|
var RunnerFactory = class {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
20
|
+
#emitter = new Emitter();
|
|
21
|
+
#config;
|
|
22
|
+
#cliArgs;
|
|
23
|
+
#file = fileURLToPath(import.meta.url);
|
|
24
|
+
#bail = false;
|
|
25
|
+
get #refiner() {
|
|
26
|
+
return this.#config.refiner;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Registers plugins
|
|
30
|
+
*/
|
|
31
|
+
async #registerPlugins(runner2) {
|
|
32
|
+
for (let plugin of this.#config.plugins) {
|
|
33
|
+
await plugin({
|
|
34
|
+
config: this.#config,
|
|
35
|
+
runner: runner2,
|
|
36
|
+
emitter: this.#emitter,
|
|
37
|
+
cliArgs: this.#cliArgs
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Configure runner
|
|
43
|
+
*/
|
|
44
|
+
configure(config, argv) {
|
|
45
|
+
this.#cliArgs = new CliParser().parse(argv || []);
|
|
46
|
+
this.#config = new ConfigManager(config, this.#cliArgs).hydrate();
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Define a custom emitter instance to use
|
|
51
|
+
*/
|
|
52
|
+
useEmitter(emitter) {
|
|
53
|
+
this.#emitter = emitter;
|
|
54
|
+
return this;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Run a test using the runner
|
|
58
|
+
*/
|
|
59
|
+
async runTest(title, callback) {
|
|
60
|
+
return this.runSuites((emitter, refiner, file) => {
|
|
61
|
+
const defaultSuite = new Suite("default", emitter, refiner);
|
|
62
|
+
const debuggingError = new Error();
|
|
63
|
+
createTest(title, emitter, refiner, debuggingError, {
|
|
64
|
+
suite: defaultSuite,
|
|
65
|
+
file
|
|
66
|
+
}).run(callback, debuggingError);
|
|
67
|
+
return [defaultSuite];
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Enable/disable the bail mode
|
|
72
|
+
*/
|
|
73
|
+
bail(toggle = true) {
|
|
74
|
+
this.#bail = toggle;
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Run dummy tests. You might use
|
|
79
|
+
*/
|
|
80
|
+
async runSuites(suites) {
|
|
81
|
+
const runner2 = new Runner(this.#emitter);
|
|
82
|
+
runner2.bail(this.#bail);
|
|
83
|
+
await this.#registerPlugins(runner2);
|
|
84
|
+
const { config, reporters, refinerFilters } = await new Planner(this.#config).plan();
|
|
85
|
+
const globalHooks = new GlobalHooks();
|
|
86
|
+
globalHooks.apply(config);
|
|
87
|
+
reporters.forEach((reporter) => {
|
|
88
|
+
runner2.registerReporter(reporter);
|
|
89
|
+
});
|
|
90
|
+
refinerFilters.forEach((filter) => {
|
|
91
|
+
config.refiner.add(filter.layer, filter.filters);
|
|
92
|
+
});
|
|
93
|
+
suites(this.#emitter, this.#refiner, this.#file).forEach((suite) => runner2.add(suite));
|
|
94
|
+
await globalHooks.setup(runner2);
|
|
95
|
+
await runner2.start();
|
|
96
|
+
await runner2.exec();
|
|
97
|
+
await runner2.end();
|
|
98
|
+
await globalHooks.teardown(null, runner2);
|
|
99
|
+
return runner2.getSummary();
|
|
100
|
+
}
|
|
68
101
|
};
|
|
102
|
+
|
|
103
|
+
// factories/create_dummy_tests.ts
|
|
104
|
+
import assert from "assert";
|
|
69
105
|
function createUnitTestsSuite(emitter, refiner, file) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
file
|
|
114
|
-
}).run(() => {
|
|
115
|
-
assert.equal(6.300000000000001, 6.300000000000001);
|
|
116
|
-
}).fails("Have to add support for floating numbers");
|
|
117
|
-
createTest("A test with an error that is not an AssertionError", emitter, refiner, /* @__PURE__ */ new Error(), {
|
|
118
|
-
group,
|
|
119
|
-
file
|
|
120
|
-
}).run(() => {
|
|
121
|
-
throw new Error("This is an error");
|
|
122
|
-
});
|
|
123
|
-
return suite;
|
|
106
|
+
const suite = new Suite("unit", emitter, refiner);
|
|
107
|
+
const group = createTestGroup("Maths#add", emitter, refiner, {
|
|
108
|
+
suite,
|
|
109
|
+
file
|
|
110
|
+
});
|
|
111
|
+
createTest("A top level test inside a suite", emitter, refiner, new Error(), {
|
|
112
|
+
suite,
|
|
113
|
+
file
|
|
114
|
+
}).run(() => {
|
|
115
|
+
});
|
|
116
|
+
createTest("add two numbers", emitter, refiner, new Error(), { group, file }).run(() => {
|
|
117
|
+
assert.equal(2 + 2, 4);
|
|
118
|
+
});
|
|
119
|
+
createTest("add three numbers", emitter, refiner, new Error(), {
|
|
120
|
+
group,
|
|
121
|
+
file
|
|
122
|
+
}).run(() => {
|
|
123
|
+
assert.equal(2 + 2 + 2, 6);
|
|
124
|
+
});
|
|
125
|
+
createTest("add group of numbers", emitter, refiner, new Error(), { group, file });
|
|
126
|
+
createTest("use math.js lib", emitter, refiner, new Error(), { group, file }).skip(
|
|
127
|
+
true,
|
|
128
|
+
"Library work pending"
|
|
129
|
+
);
|
|
130
|
+
createTest("add multiple numbers", emitter, refiner, new Error(), {
|
|
131
|
+
file,
|
|
132
|
+
group
|
|
133
|
+
}).run(() => {
|
|
134
|
+
assert.equal(2 + 2 + 2 + 2, 6);
|
|
135
|
+
});
|
|
136
|
+
createTest("add floating numbers", emitter, refiner, new Error(), { group, file }).run(() => {
|
|
137
|
+
assert.equal(2 + 2.2 + 2.1, 6);
|
|
138
|
+
}).fails("Have to add support for floating numbers");
|
|
139
|
+
createTest("regression test that is passing", emitter, refiner, new Error(), { group, file }).run(() => {
|
|
140
|
+
assert.equal(2 + 2.2 + 2.1, 2 + 2.2 + 2.1);
|
|
141
|
+
}).fails("Have to add support for floating numbers");
|
|
142
|
+
createTest("A test with an error that is not an AssertionError", emitter, refiner, new Error(), {
|
|
143
|
+
group,
|
|
144
|
+
file
|
|
145
|
+
}).run(() => {
|
|
146
|
+
throw new Error("This is an error");
|
|
147
|
+
});
|
|
148
|
+
return suite;
|
|
124
149
|
}
|
|
125
150
|
function createFunctionalTestsSuite(emitter, refiner, file) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
151
|
+
const suite = new Suite("functional", emitter, refiner);
|
|
152
|
+
const group = createTestGroup("Users/store", emitter, refiner, {
|
|
153
|
+
suite,
|
|
154
|
+
file
|
|
155
|
+
});
|
|
156
|
+
createTest("Validate user data", emitter, refiner, new Error(), {
|
|
157
|
+
group,
|
|
158
|
+
file
|
|
159
|
+
}).run(() => {
|
|
160
|
+
});
|
|
161
|
+
createTest("Disallow duplicate emails", emitter, refiner, new Error(), {
|
|
162
|
+
group,
|
|
163
|
+
file
|
|
164
|
+
}).run(() => {
|
|
165
|
+
});
|
|
166
|
+
createTest("Disallow duplicate emails across tenants", emitter, refiner, new Error(), {
|
|
167
|
+
group,
|
|
168
|
+
file
|
|
169
|
+
}).run(() => {
|
|
170
|
+
const users = ["", ""];
|
|
171
|
+
assert.equal(users.length, 1);
|
|
172
|
+
});
|
|
173
|
+
createTest("Normalize email before persisting it", emitter, refiner, new Error(), {
|
|
174
|
+
group,
|
|
175
|
+
file
|
|
176
|
+
}).skip(true, "Have to build a normalizer");
|
|
177
|
+
createTest("Send email verification mail", emitter, refiner, new Error(), {
|
|
178
|
+
group,
|
|
179
|
+
file
|
|
180
|
+
});
|
|
181
|
+
createTest("Test that times out", emitter, refiner, new Error(), {
|
|
182
|
+
group,
|
|
183
|
+
file
|
|
184
|
+
}).run(() => {
|
|
185
|
+
return new Promise((resolve) => {
|
|
186
|
+
setTimeout(resolve, 2100);
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
const usersListGroup = createTestGroup("Users/list", emitter, refiner, {
|
|
190
|
+
suite,
|
|
191
|
+
file
|
|
192
|
+
});
|
|
193
|
+
usersListGroup.setup(() => {
|
|
194
|
+
throw new Error("Unable to cleanup database");
|
|
195
|
+
});
|
|
196
|
+
createTest(
|
|
197
|
+
"A test that will never run because the group hooks fails",
|
|
198
|
+
emitter,
|
|
199
|
+
refiner,
|
|
200
|
+
new Error(),
|
|
201
|
+
{
|
|
202
|
+
group: usersListGroup
|
|
203
|
+
}
|
|
204
|
+
);
|
|
205
|
+
createTest("A top level test inside functional suite", emitter, refiner, new Error(), {
|
|
206
|
+
suite,
|
|
207
|
+
file
|
|
208
|
+
}).run(() => {
|
|
209
|
+
});
|
|
210
|
+
return suite;
|
|
174
211
|
}
|
|
175
212
|
function createDummyTests(emitter, refiner, file) {
|
|
176
|
-
|
|
213
|
+
return [
|
|
214
|
+
createUnitTestsSuite(emitter, refiner, file),
|
|
215
|
+
createFunctionalTestsSuite(emitter, refiner, file)
|
|
216
|
+
];
|
|
177
217
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
218
|
+
|
|
219
|
+
// factories/main.ts
|
|
220
|
+
var runner = () => new RunnerFactory();
|
|
221
|
+
var syncReporter = {
|
|
222
|
+
name: "sync",
|
|
223
|
+
handler(r, emitter) {
|
|
224
|
+
emitter.on("runner:end", function() {
|
|
225
|
+
const summary = r.getSummary();
|
|
226
|
+
if (summary.hasError) {
|
|
227
|
+
if (summary.failureTree[0].errors.length) {
|
|
228
|
+
throw summary.failureTree[0].errors[0].error;
|
|
229
|
+
}
|
|
230
|
+
if (summary.failureTree[0].children[0].errors.length) {
|
|
231
|
+
throw summary.failureTree[0].children[0].errors[0].error;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
export {
|
|
238
|
+
createDummyTests,
|
|
239
|
+
runner,
|
|
240
|
+
syncReporter
|
|
190
241
|
};
|
|
191
|
-
export { createDummyTests, runner, syncReporter };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Suite, Emitter,
|
|
1
|
+
import { Suite, Emitter, TestContext, Refiner } from '../modules/core/main.js';
|
|
2
2
|
import type { Config, TestExecutor, RunnerSummary } from '../src/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Runner factory exposes the API to run dummy suites, groups and tests.
|
package/build/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TestExecutor } from '@japa/core/types';
|
|
2
2
|
import type { Config } from './src/types.js';
|
|
3
|
-
import {
|
|
3
|
+
import { Group, Test, TestContext } from './modules/core/main.js';
|
|
4
4
|
type OmitFirstArg<F> = F extends [_: any, ...args: infer R] ? R : never;
|
|
5
5
|
/**
|
|
6
6
|
* Create a Japa test. Defining a test without the callback
|