@eggjs/mock 7.0.0-beta.19 → 7.0.0-beta.21
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/app/extend/agent.d.ts +33 -38
- package/dist/app/extend/agent.js +45 -47
- package/dist/app/extend/application.d.ts +167 -171
- package/dist/app/extend/application.js +442 -382
- package/dist/app/middleware/cluster_app_mock.d.ts +2 -5
- package/dist/app/middleware/cluster_app_mock.js +99 -96
- package/dist/app.d.ts +5 -9
- package/dist/app.js +18 -17
- package/dist/bootstrap.d.ts +5 -9
- package/dist/bootstrap.js +12 -11
- package/dist/index.d.ts +76 -80
- package/dist/index.js +81 -38
- package/dist/inject_mocha.d.ts +1 -1
- package/dist/inject_mocha.js +28 -27
- package/dist/lib/agent_handler.d.ts +3 -7
- package/dist/lib/agent_handler.js +20 -22
- package/dist/lib/app.d.ts +3 -7
- package/dist/lib/app.js +285 -248
- package/dist/lib/app_handler.d.ts +5 -9
- package/dist/lib/app_handler.js +62 -49
- package/dist/lib/cluster.d.ts +92 -97
- package/dist/lib/cluster.js +335 -278
- package/dist/lib/context.d.ts +1 -4
- package/dist/lib/context.js +11 -10
- package/dist/lib/format_options.d.ts +2 -7
- package/dist/lib/format_options.js +88 -60
- package/dist/lib/inject_context.d.ts +1 -4
- package/dist/lib/inject_context.js +123 -103
- package/dist/lib/mock_agent.d.ts +4 -8
- package/dist/lib/mock_agent.js +42 -42
- package/dist/lib/mock_custom_loader.d.ts +1 -4
- package/dist/lib/mock_custom_loader.js +33 -34
- package/dist/lib/mock_http_server.d.ts +2 -6
- package/dist/lib/mock_http_server.js +17 -16
- package/dist/lib/mock_httpclient.d.ts +34 -38
- package/dist/lib/mock_httpclient.js +142 -106
- package/dist/lib/parallel/agent.d.ts +19 -23
- package/dist/lib/parallel/agent.js +113 -107
- package/dist/lib/parallel/app.d.ts +19 -23
- package/dist/lib/parallel/app.js +108 -96
- package/dist/lib/parallel/util.d.ts +3 -6
- package/dist/lib/parallel/util.js +64 -57
- package/dist/lib/prerequire.d.ts +1 -1
- package/dist/lib/prerequire.js +25 -1
- package/dist/lib/request_call_function.d.ts +1 -1
- package/dist/lib/request_call_function.js +47 -34
- package/dist/lib/restore.d.ts +1 -4
- package/dist/lib/restore.js +11 -14
- package/dist/lib/start-cluster.d.ts +2 -1
- package/dist/lib/start-cluster.js +14 -15
- package/dist/lib/supertest.d.ts +6 -11
- package/dist/lib/supertest.js +36 -35
- package/dist/lib/tmp/empty.d.ts +1 -1
- package/dist/lib/tmp/empty.js +2 -1
- package/dist/lib/types.d.ts +64 -68
- package/dist/lib/types.js +2 -1
- package/dist/lib/utils.d.ts +8 -11
- package/dist/lib/utils.js +63 -34
- package/dist/register.d.ts +7 -9
- package/dist/register.js +40 -36
- package/package.json +7 -8
- package/dist/_virtual/rolldown_runtime.js +0 -7
- package/dist/typings/index.d.ts +0 -1
|
@@ -1,35 +1,34 @@
|
|
|
1
|
-
import { debuglog } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
2
|
+
const debug = debuglog('egg/mock/lib/mock_custom_loader');
|
|
3
|
+
export function setCustomLoader(app) {
|
|
4
|
+
const customLoader = app.config.customLoader;
|
|
5
|
+
if (!customLoader)
|
|
6
|
+
return;
|
|
7
|
+
for (const field of Object.keys(customLoader)) {
|
|
8
|
+
const loaderConfig = Object.assign({}, customLoader[field]);
|
|
9
|
+
loaderConfig.field = field;
|
|
10
|
+
addMethod(loaderConfig);
|
|
11
|
+
}
|
|
12
|
+
function addMethod(loaderConfig) {
|
|
13
|
+
const field = loaderConfig.field;
|
|
14
|
+
const appMethodName = 'mock' + field.replace(/^[a-z]/i, s => s.toUpperCase());
|
|
15
|
+
if (app[appMethodName]) {
|
|
16
|
+
app.coreLogger.warn("Can't override app.%s", appMethodName);
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
debug('[addMethod] %s => %j', appMethodName, loaderConfig);
|
|
20
|
+
app[appMethodName] = function (service, methodName, fn) {
|
|
21
|
+
if (typeof service === 'string') {
|
|
22
|
+
const arr = service.split('.');
|
|
23
|
+
service = loaderConfig.inject === 'ctx' ? this[field + 'Classes'] : this[field];
|
|
24
|
+
for (const key of arr) {
|
|
25
|
+
service = service[key];
|
|
26
|
+
}
|
|
27
|
+
service = service.prototype || service;
|
|
28
|
+
}
|
|
29
|
+
this._mockFn(service, methodName, fn);
|
|
30
|
+
return this;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
32
33
|
}
|
|
33
|
-
|
|
34
|
-
//#endregion
|
|
35
|
-
export { setCustomLoader };
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19jdXN0b21fbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9tb2NrX2N1c3RvbV9sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVyQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUUxRCxNQUFNLFVBQVUsZUFBZSxDQUFDLEdBQVE7SUFDdEMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7SUFDN0MsSUFBSSxDQUFDLFlBQVk7UUFBRSxPQUFPO0lBRTFCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQzlDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVELFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsU0FBUyxTQUFTLENBQUMsWUFBaUI7UUFDbEMsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQWUsQ0FBQztRQUMzQyxNQUFNLGFBQWEsR0FBRyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUM5RSxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzVELE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxDQUFDLHNCQUFzQixFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRCxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsVUFBVSxPQUFZLEVBQUUsVUFBa0IsRUFBRSxFQUFPO1lBQ3RFLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLE9BQU8sR0FBRyxZQUFZLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNoRixLQUFLLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUN0QixPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN6QixDQUFDO2dCQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQztZQUN6QyxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -1,6 +1,2 @@
|
|
|
1
|
-
import { Server } from
|
|
2
|
-
|
|
3
|
-
//#region src/lib/mock_http_server.d.ts
|
|
4
|
-
declare function createServer(app: any): Server;
|
|
5
|
-
//#endregion
|
|
6
|
-
export { createServer };
|
|
1
|
+
import { Server } from 'node:http';
|
|
2
|
+
export declare function createServer(app: any): Server;
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import http, { Server } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import http, { Server } from 'node:http';
|
|
2
|
+
const SERVER = Symbol('http_server');
|
|
3
|
+
export function createServer(app) {
|
|
4
|
+
let server = app[SERVER] || app.callback();
|
|
5
|
+
if (typeof server === 'function') {
|
|
6
|
+
server = http.createServer(server);
|
|
7
|
+
// cache server, avoid create many times
|
|
8
|
+
app[SERVER] = server;
|
|
9
|
+
if (!app.server) {
|
|
10
|
+
app.server = server;
|
|
11
|
+
}
|
|
12
|
+
// emit server event just like egg-cluster does
|
|
13
|
+
// https://github.com/eggjs/egg-cluster/blob/master/lib/app_worker.js#L52
|
|
14
|
+
app.emit('server', server);
|
|
15
|
+
}
|
|
16
|
+
return server;
|
|
14
17
|
}
|
|
15
|
-
|
|
16
|
-
//#endregion
|
|
17
|
-
export { createServer };
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19odHRwX3NlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvbW9ja19odHRwX3NlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFFckMsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUFRO0lBQ25DLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0MsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUNqQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyx3Q0FBd0M7UUFDeEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLENBQUM7UUFDRCwrQ0FBK0M7UUFDL0MseUVBQXlFO1FBQ3pFLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIn0=
|
|
@@ -1,40 +1,36 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
*/
|
|
25
|
-
repeats?: number;
|
|
1
|
+
import type { Dispatcher, Headers, BodyInit } from 'urllib';
|
|
2
|
+
export interface MockResultOptions {
|
|
3
|
+
data: string | Buffer | Record<string, any>;
|
|
4
|
+
/**
|
|
5
|
+
* http status
|
|
6
|
+
*/
|
|
7
|
+
status?: number;
|
|
8
|
+
/**
|
|
9
|
+
* response header
|
|
10
|
+
*/
|
|
11
|
+
headers?: Record<string, string>;
|
|
12
|
+
/**
|
|
13
|
+
* delay the associated reply by a set amount in ms
|
|
14
|
+
*/
|
|
15
|
+
delay?: number;
|
|
16
|
+
/**
|
|
17
|
+
* any matching request will always reply with the defined response indefinitely
|
|
18
|
+
*/
|
|
19
|
+
persist?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* any matching request will reply with the defined response a fixed amount of times
|
|
22
|
+
*/
|
|
23
|
+
repeats?: number;
|
|
26
24
|
}
|
|
27
|
-
type ResultObject = MockResultOptions;
|
|
28
|
-
interface MockResponseCallbackOptions {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
export type ResultObject = MockResultOptions;
|
|
26
|
+
export interface MockResponseCallbackOptions {
|
|
27
|
+
path: string;
|
|
28
|
+
method: string;
|
|
29
|
+
headers?: Headers | Record<string, string>;
|
|
30
|
+
origin?: string;
|
|
31
|
+
body?: BodyInit | Dispatcher.DispatchOptions['body'] | null;
|
|
32
|
+
maxRedirections?: number;
|
|
35
33
|
}
|
|
36
|
-
type MockResultFunction = (url: string, options: MockResponseCallbackOptions) => MockResultOptions | string;
|
|
37
|
-
declare function createMockHttpClient(app: any): (mockUrl: string | RegExp, mockMethod: string | string[] | MockResultOptions | MockResultFunction, mockResult?: MockResultOptions | MockResultFunction | string) => void;
|
|
38
|
-
type MockHttpClientMethod = ReturnType<typeof createMockHttpClient>;
|
|
39
|
-
//#endregion
|
|
40
|
-
export { MockHttpClientMethod, MockResponseCallbackOptions, MockResultFunction, MockResultOptions, ResultObject, createMockHttpClient };
|
|
34
|
+
export type MockResultFunction = (url: string, options: MockResponseCallbackOptions) => MockResultOptions | string;
|
|
35
|
+
export declare function createMockHttpClient(app: any): (mockUrl: string | RegExp, mockMethod: string | string[] | MockResultOptions | MockResultFunction, mockResult?: MockResultOptions | MockResultFunction | string) => void;
|
|
36
|
+
export type MockHttpClientMethod = ReturnType<typeof createMockHttpClient>;
|
|
@@ -1,110 +1,146 @@
|
|
|
1
|
+
import { mm } from 'mm';
|
|
2
|
+
import { extend } from '@eggjs/extend2';
|
|
1
3
|
import { getMockAgent } from "./mock_agent.js";
|
|
2
|
-
import { mm } from "mm";
|
|
3
|
-
import { extend } from "@eggjs/extend2";
|
|
4
|
-
|
|
5
|
-
//#region src/lib/mock_httpclient.ts
|
|
6
4
|
function normalizeResult(result) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
if (typeof result === 'string') {
|
|
6
|
+
result = { data: result };
|
|
7
|
+
}
|
|
8
|
+
if (!result.status) {
|
|
9
|
+
result.status = 200;
|
|
10
|
+
}
|
|
11
|
+
result.data = result.data || '';
|
|
12
|
+
if (Buffer.isBuffer(result.data)) {
|
|
13
|
+
// do nothing
|
|
14
|
+
}
|
|
15
|
+
else if (typeof result.data === 'object') {
|
|
16
|
+
// json
|
|
17
|
+
result.data = Buffer.from(JSON.stringify(result.data));
|
|
18
|
+
}
|
|
19
|
+
else if (typeof result.data === 'string') {
|
|
20
|
+
// string
|
|
21
|
+
result.data = Buffer.from(result.data);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
throw new Error('`mockResult.data` must be buffer, string or json');
|
|
25
|
+
}
|
|
26
|
+
result.headers = result.headers ?? {};
|
|
27
|
+
return result;
|
|
15
28
|
}
|
|
16
|
-
const MOCK_CONFIGS = Symbol(
|
|
17
|
-
const MOCK_CONFIG_INDEX = Symbol(
|
|
18
|
-
function createMockHttpClient(app) {
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
|
|
29
|
+
const MOCK_CONFIGS = Symbol('MOCK_CONFIGS');
|
|
30
|
+
const MOCK_CONFIG_INDEX = Symbol('MOCK_CONFIG_INDEX');
|
|
31
|
+
export function createMockHttpClient(app) {
|
|
32
|
+
/**
|
|
33
|
+
* mock httpclient
|
|
34
|
+
* @function mockHttpclient
|
|
35
|
+
* @param {String} mockUrl - url
|
|
36
|
+
* @param {String|Array} mockMethod - http method, default is '*'
|
|
37
|
+
* @param {Object|Function} mockResult - you data
|
|
38
|
+
* - data - buffer / string / json
|
|
39
|
+
* - status - http status
|
|
40
|
+
* - headers - response header
|
|
41
|
+
* - delay - delay the associated reply by a set amount in ms.
|
|
42
|
+
* - persist - any matching request will always reply with the defined response indefinitely, default is true
|
|
43
|
+
* - repeats - number, any matching request will reply with the defined response a fixed amount of times
|
|
44
|
+
*/
|
|
45
|
+
return function mockHttpClient(mockUrl, mockMethod, mockResult) {
|
|
46
|
+
let mockMethods = mockMethod;
|
|
47
|
+
if (!mockResult) {
|
|
48
|
+
// app.mockHttpclient(mockUrl, mockResult)
|
|
49
|
+
mockResult = mockMethod;
|
|
50
|
+
mockMethods = ['*'];
|
|
51
|
+
}
|
|
52
|
+
if (!Array.isArray(mockMethods)) {
|
|
53
|
+
mockMethods = [mockMethods];
|
|
54
|
+
}
|
|
55
|
+
mockMethods = mockMethods.map(method => (method || 'GET').toUpperCase());
|
|
56
|
+
// use MockAgent on undici
|
|
57
|
+
let mockConfigs = app[MOCK_CONFIGS];
|
|
58
|
+
if (!mockConfigs) {
|
|
59
|
+
mockConfigs = [];
|
|
60
|
+
mm(app, MOCK_CONFIGS, mockConfigs);
|
|
61
|
+
}
|
|
62
|
+
let mockConfigIndex = -1;
|
|
63
|
+
let origin = mockUrl;
|
|
64
|
+
let originMethod;
|
|
65
|
+
const pathname = mockUrl;
|
|
66
|
+
let pathMethod;
|
|
67
|
+
if (typeof mockUrl === 'string') {
|
|
68
|
+
const urlObject = new URL(mockUrl);
|
|
69
|
+
origin = urlObject.origin;
|
|
70
|
+
const originalPathname = urlObject.pathname;
|
|
71
|
+
pathMethod = path => {
|
|
72
|
+
if (path === originalPathname)
|
|
73
|
+
return true;
|
|
74
|
+
// should match /foo?a=1 including query
|
|
75
|
+
if (path.includes('?'))
|
|
76
|
+
return path.startsWith(originalPathname);
|
|
77
|
+
return false;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
else if (mockUrl instanceof RegExp) {
|
|
81
|
+
let requestOrigin = '';
|
|
82
|
+
originMethod = value => {
|
|
83
|
+
requestOrigin = value;
|
|
84
|
+
return true;
|
|
85
|
+
};
|
|
86
|
+
pathMethod = path => {
|
|
87
|
+
for (const config of mockConfigs) {
|
|
88
|
+
if (config.mockUrl.test(`${requestOrigin}${path}`)) {
|
|
89
|
+
mm(app, MOCK_CONFIG_INDEX, config.mockConfigIndex);
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
};
|
|
95
|
+
mockConfigIndex = mockConfigs.length;
|
|
96
|
+
mockConfigs.push({ mockUrl, mockResult, mockConfigIndex });
|
|
97
|
+
}
|
|
98
|
+
const mockPool = originMethod
|
|
99
|
+
? getMockAgent(app).get(originMethod)
|
|
100
|
+
: getMockAgent(app).get(originMethod ?? origin);
|
|
101
|
+
// persist default is true
|
|
102
|
+
let persist = true;
|
|
103
|
+
if (typeof mockResult === 'object' && typeof mockResult.persist === 'boolean') {
|
|
104
|
+
persist = mockResult.persist;
|
|
105
|
+
}
|
|
106
|
+
mockMethods.forEach(function (method) {
|
|
107
|
+
const mockScope = mockPool
|
|
108
|
+
.intercept({
|
|
109
|
+
path: pathMethod ?? pathname,
|
|
110
|
+
method: method === '*' ? () => true : method,
|
|
111
|
+
})
|
|
112
|
+
.reply(options => {
|
|
113
|
+
// not support mockResult as an async function
|
|
114
|
+
const requestUrl = `${options.origin}${options.path}`;
|
|
115
|
+
let mockRequestResult;
|
|
116
|
+
if (mockConfigIndex >= 0) {
|
|
117
|
+
mockResult = mockConfigs[app[MOCK_CONFIG_INDEX]].mockResult;
|
|
118
|
+
mockRequestResult = typeof mockResult === 'function' ? mockResult(requestUrl, options) : mockResult;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
mockRequestResult = typeof mockResult === 'function' ? mockResult(requestUrl, options) : mockResult;
|
|
122
|
+
}
|
|
123
|
+
const result = extend(true, {}, normalizeResult(mockRequestResult));
|
|
124
|
+
return {
|
|
125
|
+
statusCode: result.status,
|
|
126
|
+
data: result.data,
|
|
127
|
+
responseOptions: {
|
|
128
|
+
headers: result.headers,
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
});
|
|
132
|
+
if (typeof mockResult === 'object') {
|
|
133
|
+
if (mockResult.delay && mockResult.delay > 0) {
|
|
134
|
+
mockScope.delay(mockResult.delay);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (persist) {
|
|
138
|
+
mockScope.persist();
|
|
139
|
+
}
|
|
140
|
+
else if (typeof mockResult === 'object' && mockResult.repeats && mockResult.repeats > 0) {
|
|
141
|
+
mockScope.times(mockResult.repeats);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
};
|
|
107
145
|
}
|
|
108
|
-
|
|
109
|
-
//#endregion
|
|
110
|
-
export { createMockHttpClient };
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ja19odHRwY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9tb2NrX2h0dHBjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLElBQUksQ0FBQztBQUN4QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBdUMvQyxTQUFTLGVBQWUsQ0FBQyxNQUFrQztJQUN6RCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNoQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDakMsYUFBYTtJQUNmLENBQUM7U0FBTSxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxPQUFPO1FBQ1AsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztTQUFNLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzNDLFNBQVM7UUFDVCxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFD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
|
|
@@ -1,24 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
*/
|
|
20
|
-
_close(): Promise<void>;
|
|
1
|
+
import { Base } from 'sdk-base';
|
|
2
|
+
import type { Agent as EggAgent } from 'egg';
|
|
3
|
+
import type { MockOptions, MockApplicationOptions } from '../types.ts';
|
|
4
|
+
import { APP_INIT } from './util.ts';
|
|
5
|
+
export declare class MockAgent extends Base {
|
|
6
|
+
#private;
|
|
7
|
+
options: MockApplicationOptions;
|
|
8
|
+
baseDir: string;
|
|
9
|
+
[APP_INIT]: boolean;
|
|
10
|
+
_instance: EggAgent;
|
|
11
|
+
constructor(options: MockApplicationOptions);
|
|
12
|
+
_init(): Promise<void>;
|
|
13
|
+
on(...args: any[]): this;
|
|
14
|
+
once(...args: any[]): this;
|
|
15
|
+
/**
|
|
16
|
+
* close agent
|
|
17
|
+
*/
|
|
18
|
+
_close(): Promise<void>;
|
|
21
19
|
}
|
|
22
|
-
declare function createAgent(options: MockOptions): MockAgent;
|
|
23
|
-
//#endregion
|
|
24
|
-
export { MockAgent, createAgent };
|
|
20
|
+
export declare function createAgent(options: MockOptions): MockAgent;
|