@modern-js/plugin-testing 2.0.0-beta.3 → 2.0.0-beta.6
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/CHANGELOG.md +159 -0
- package/dist/js/modern/base/config/index.js +29 -9
- package/dist/js/modern/base/config/patches/assetsModule.js +7 -7
- package/dist/js/modern/base/config/patches/filemock.js +4 -1
- package/dist/js/modern/base/config/patches/index.js +30 -7
- package/dist/js/modern/base/config/patches/transformer.js +13 -18
- package/dist/js/modern/base/config/resolver.js +20 -11
- package/dist/js/modern/base/config/testConfigOperator.js +29 -23
- package/dist/js/modern/base/config/transformer/babelTransformer.js +16 -8
- package/dist/js/modern/base/hook.js +10 -5
- package/dist/js/modern/base/index.js +14 -6
- package/dist/js/modern/base/runJest.js +73 -62
- package/dist/js/modern/base/utils.js +40 -23
- package/dist/js/modern/cli/bff/app.js +37 -12
- package/dist/js/modern/cli/bff/constant.js +4 -1
- package/dist/js/modern/cli/bff/index.js +95 -52
- package/dist/js/modern/cli/bff/mockAPI.js +79 -64
- package/dist/js/modern/cli/bff/setup.js +71 -34
- package/dist/js/modern/cli/bff/utils/index.js +31 -15
- package/dist/js/modern/cli/index.js +65 -30
- package/dist/js/modern/cli/test.js +53 -18
- package/dist/js/modern/constant.js +4 -1
- package/dist/js/modern/index.js +3 -3
- package/dist/js/modern/modern-app.env.d.js +0 -0
- package/dist/js/modern/runtime-testing/app.js +25 -14
- package/dist/js/modern/runtime-testing/base.js +7 -3
- package/dist/js/modern/runtime-testing/customRender.js +24 -10
- package/dist/js/modern/runtime-testing/index.js +1 -1
- package/dist/js/modern/runtime-testing/reduck.js +41 -19
- package/dist/js/modern/runtime-testing/request.js +4 -4
- package/dist/js/modern/runtime-testing/resolvePlugins.js +24 -8
- package/dist/js/node/base/config/index.js +62 -18
- package/dist/js/node/base/config/patches/assetsModule.js +34 -12
- package/dist/js/node/base/config/patches/filemock.js +24 -7
- package/dist/js/node/base/config/patches/index.js +54 -15
- package/dist/js/node/base/config/patches/transformer.js +42 -25
- package/dist/js/node/base/config/resolver.js +25 -10
- package/dist/js/node/base/config/testConfigOperator.js +51 -30
- package/dist/js/node/base/config/transformer/babelTransformer.js +42 -15
- package/dist/js/node/base/hook.js +34 -13
- package/dist/js/node/base/index.js +39 -62
- package/dist/js/node/base/runJest.js +104 -71
- package/dist/js/node/base/types/index.js +15 -0
- package/dist/js/node/base/utils.js +70 -34
- package/dist/js/node/cli/bff/app.js +64 -22
- package/dist/js/node/cli/bff/constant.js +26 -7
- package/dist/js/node/cli/bff/index.js +123 -65
- package/dist/js/node/cli/bff/mockAPI.js +103 -71
- package/dist/js/node/cli/bff/setup.js +71 -28
- package/dist/js/node/cli/bff/utils/index.js +57 -22
- package/dist/js/node/cli/index.js +92 -46
- package/dist/js/node/cli/test.js +81 -27
- package/dist/js/node/constant.js +26 -7
- package/dist/js/node/index.js +19 -18
- package/dist/js/node/modern-app.env.d.js +0 -0
- package/dist/js/node/runtime-testing/app.js +53 -25
- package/dist/js/node/runtime-testing/base.js +34 -32
- package/dist/js/node/runtime-testing/customRender.js +49 -18
- package/dist/js/node/runtime-testing/index.js +18 -27
- package/dist/js/node/runtime-testing/reduck.js +72 -31
- package/dist/js/node/runtime-testing/request.js +36 -13
- package/dist/js/node/runtime-testing/resolvePlugins.js +41 -12
- package/dist/js/treeshaking/base/config/index.js +150 -31
- package/dist/js/treeshaking/base/config/patches/assetsModule.js +9 -11
- package/dist/js/treeshaking/base/config/patches/filemock.js +2 -1
- package/dist/js/treeshaking/base/config/patches/index.js +221 -64
- package/dist/js/treeshaking/base/config/patches/transformer.js +34 -37
- package/dist/js/treeshaking/base/config/resolver.js +36 -13
- package/dist/js/treeshaking/base/config/testConfigOperator.js +120 -69
- package/dist/js/treeshaking/base/config/transformer/babelTransformer.js +16 -10
- package/dist/js/treeshaking/base/hook.js +8 -7
- package/dist/js/treeshaking/base/index.js +7 -6
- package/dist/js/treeshaking/base/runJest.js +281 -164
- package/dist/js/treeshaking/base/types/index.js +1 -0
- package/dist/js/treeshaking/base/utils.js +72 -48
- package/dist/js/treeshaking/cli/bff/app.js +192 -68
- package/dist/js/treeshaking/cli/bff/constant.js +2 -1
- package/dist/js/treeshaking/cli/bff/index.js +291 -130
- package/dist/js/treeshaking/cli/bff/mockAPI.js +181 -91
- package/dist/js/treeshaking/cli/bff/setup.js +185 -59
- package/dist/js/treeshaking/cli/bff/utils/index.js +47 -21
- package/dist/js/treeshaking/cli/index.js +249 -108
- package/dist/js/treeshaking/cli/test.js +177 -44
- package/dist/js/treeshaking/constant.js +2 -1
- package/dist/js/treeshaking/index.js +3 -3
- package/dist/js/treeshaking/modern-app.env.d.js +1 -0
- package/dist/js/treeshaking/runtime-testing/app.js +85 -39
- package/dist/js/treeshaking/runtime-testing/base.js +4 -3
- package/dist/js/treeshaking/runtime-testing/customRender.js +38 -10
- package/dist/js/treeshaking/runtime-testing/index.js +1 -1
- package/dist/js/treeshaking/runtime-testing/reduck.js +85 -33
- package/dist/js/treeshaking/runtime-testing/request.js +49 -19
- package/dist/js/treeshaking/runtime-testing/resolvePlugins.js +45 -14
- package/dist/types/base/config/index.d.ts +1 -0
- package/dist/types/base/config/patches/assetsModule.d.ts +1 -0
- package/dist/types/base/config/patches/filemock.d.ts +1 -0
- package/dist/types/base/config/patches/transformer.d.ts +1 -0
- package/dist/types/base/config/testConfigOperator.d.ts +2 -0
- package/dist/types/base/runJest.d.ts +2 -0
- package/dist/types/base/utils.d.ts +1 -0
- package/dist/types/cli/bff/index.d.ts +2 -0
- package/dist/types/cli/bff/mockAPI.d.ts +1 -0
- package/dist/types/cli/index.d.ts +2 -0
- package/dist/types/runtime-testing/app.d.ts +3 -0
- package/dist/types/runtime-testing/customRender.d.ts +2 -0
- package/package.json +21 -25
|
@@ -1,10 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
import * as ptr from "path-to-regexp";
|
|
5
18
|
import * as mockAppModule from "./app";
|
|
6
|
-
|
|
7
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
8
19
|
const mock_replaceUrlWithParams = (url, paramValues, payload) => {
|
|
9
20
|
const keys = [];
|
|
10
21
|
ptr.pathToRegexp(url, keys);
|
|
@@ -14,81 +25,85 @@ const mock_replaceUrlWithParams = (url, paramValues, payload) => {
|
|
|
14
25
|
}
|
|
15
26
|
return cur;
|
|
16
27
|
}, {});
|
|
17
|
-
const getFinalPath = ptr.compile(url, {
|
|
18
|
-
|
|
19
|
-
});
|
|
20
|
-
return getFinalPath(_objectSpread(_objectSpread({}, params), payload));
|
|
28
|
+
const getFinalPath = ptr.compile(url, { encode: encodeURIComponent });
|
|
29
|
+
return getFinalPath(__spreadValues(__spreadValues({}, params), payload));
|
|
21
30
|
};
|
|
22
|
-
|
|
23
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
24
|
-
const mock_getParamsAndPayload = args => {
|
|
31
|
+
const mock_getParamsAndPayload = (args) => {
|
|
25
32
|
if (args.length === 0) {
|
|
26
33
|
return [[], {}];
|
|
27
34
|
}
|
|
28
35
|
const head = args[0];
|
|
29
|
-
if (typeof head ===
|
|
36
|
+
if (typeof head === "object") {
|
|
30
37
|
return [[], head];
|
|
31
38
|
} else {
|
|
32
39
|
const latest = args[args.length - 1];
|
|
33
|
-
if (typeof latest ===
|
|
40
|
+
if (typeof latest === "object") {
|
|
34
41
|
return [args.slice(0, args.length - 1), latest];
|
|
35
42
|
} else {
|
|
36
43
|
return [args, {}];
|
|
37
44
|
}
|
|
38
45
|
}
|
|
39
46
|
};
|
|
40
|
-
|
|
47
|
+
var mockAPI_default = (mockApiInfosByFile) => {
|
|
41
48
|
const files = Object.keys(mockApiInfosByFile);
|
|
42
|
-
files.forEach(mockedFile => {
|
|
49
|
+
files.forEach((mockedFile) => {
|
|
43
50
|
jest.mock(mockedFile, () => {
|
|
44
|
-
const supertest = require(
|
|
45
|
-
return mockApiInfosByFile[mockedFile].reduce(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const [params, payload] = mock_getParamsAndPayload(args);
|
|
52
|
-
const {
|
|
53
|
-
returnHttp
|
|
54
|
-
} = module[info.name];
|
|
55
|
-
const url = mock_replaceUrlWithParams(info.routePath, params, payload.params);
|
|
56
|
-
const app = mockAppModule.getApp();
|
|
57
|
-
let test = supertest(app)[info.httpMethod.toLowerCase()](url);
|
|
58
|
-
if (payload.query) {
|
|
59
|
-
test = test.query(payload.query);
|
|
60
|
-
}
|
|
61
|
-
if (payload.body) {
|
|
62
|
-
test = test.send(payload.body);
|
|
63
|
-
}
|
|
64
|
-
if (payload.data) {
|
|
65
|
-
test = test.send(payload.data);
|
|
66
|
-
}
|
|
67
|
-
if (payload.headers) {
|
|
68
|
-
for (const name in payload.headers) {
|
|
69
|
-
test = test.set(name, payload.headers[name]);
|
|
51
|
+
const supertest = require("supertest");
|
|
52
|
+
return mockApiInfosByFile[mockedFile].reduce(
|
|
53
|
+
(res, info) => {
|
|
54
|
+
const module = {
|
|
55
|
+
[info.name]: (...args) => {
|
|
56
|
+
if (mockAppModule.isInHandler()) {
|
|
57
|
+
return info.handler(...args);
|
|
70
58
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
59
|
+
const [params, payload] = mock_getParamsAndPayload(args);
|
|
60
|
+
const { returnHttp } = module[info.name];
|
|
61
|
+
const url = mock_replaceUrlWithParams(
|
|
62
|
+
info.routePath,
|
|
63
|
+
params,
|
|
64
|
+
payload.params
|
|
65
|
+
);
|
|
66
|
+
const app = mockAppModule.getApp();
|
|
67
|
+
let test = supertest(app)[info.httpMethod.toLowerCase()](url);
|
|
68
|
+
if (payload.query) {
|
|
69
|
+
test = test.query(payload.query);
|
|
70
|
+
}
|
|
71
|
+
if (payload.body) {
|
|
72
|
+
test = test.send(payload.body);
|
|
73
|
+
}
|
|
74
|
+
if (payload.data) {
|
|
75
|
+
test = test.send(payload.data);
|
|
76
|
+
}
|
|
77
|
+
if (payload.headers) {
|
|
78
|
+
for (const name in payload.headers) {
|
|
79
|
+
test = test.set(name, payload.headers[name]);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (payload.cookies) {
|
|
83
|
+
test = test.set("Cookie", [payload.cookies]);
|
|
83
84
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
85
|
+
if (returnHttp) {
|
|
86
|
+
return test;
|
|
87
|
+
}
|
|
88
|
+
return test.then((value) => {
|
|
89
|
+
try {
|
|
90
|
+
return JSON.parse(value.text);
|
|
91
|
+
} catch (e) {
|
|
92
|
+
return value.text;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
res[info.name] = module[info.name];
|
|
98
|
+
Object.assign(res[info.name], info.handler);
|
|
99
|
+
res.__esModule = true;
|
|
100
|
+
return res;
|
|
101
|
+
},
|
|
102
|
+
{}
|
|
103
|
+
);
|
|
92
104
|
});
|
|
93
105
|
});
|
|
94
|
-
}
|
|
106
|
+
};
|
|
107
|
+
export {
|
|
108
|
+
mockAPI_default as default
|
|
109
|
+
};
|
|
@@ -1,38 +1,75 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
2
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
3
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
4
|
+
};
|
|
5
|
+
var __async = (__this, __arguments, generator) => {
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
var fulfilled = (value) => {
|
|
8
|
+
try {
|
|
9
|
+
step(generator.next(value));
|
|
10
|
+
} catch (e) {
|
|
11
|
+
reject(e);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
var rejected = (value) => {
|
|
15
|
+
try {
|
|
16
|
+
step(generator.throw(value));
|
|
17
|
+
} catch (e) {
|
|
18
|
+
reject(e);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
22
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
import path from "path";
|
|
26
|
+
import { ApiRouter } from "@modern-js/bff-core";
|
|
3
27
|
import { bff_info_key } from "./constant";
|
|
4
28
|
import mockAPI from "./mockAPI";
|
|
5
29
|
import { createApp, closeServer } from "./app";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
30
|
+
var require_setup = __commonJS({
|
|
31
|
+
"src/cli/bff/setup.ts"(exports) {
|
|
32
|
+
let uped = false;
|
|
33
|
+
const setup = () => {
|
|
34
|
+
var _a, _b;
|
|
35
|
+
if (uped) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
uped = true;
|
|
39
|
+
const bff_info = global[bff_info_key];
|
|
40
|
+
const prefix = (_b = (_a = bff_info == null ? void 0 : bff_info.modernUserConfig) == null ? void 0 : _a.bff) == null ? void 0 : _b.prefix;
|
|
41
|
+
const apiRouter = new ApiRouter({
|
|
42
|
+
apiDir: path.join(bff_info.appDir, "./api"),
|
|
43
|
+
prefix
|
|
44
|
+
});
|
|
45
|
+
const apiInfos = apiRouter.getApiHandlers();
|
|
46
|
+
const apiInfosByFile = apiInfos.reduce(
|
|
47
|
+
(res, apiInfo) => {
|
|
48
|
+
if (!res[apiInfo.filename]) {
|
|
49
|
+
res[apiInfo.filename] = [];
|
|
50
|
+
}
|
|
51
|
+
res[apiInfo.filename].push(apiInfo);
|
|
52
|
+
return res;
|
|
53
|
+
},
|
|
54
|
+
{}
|
|
55
|
+
);
|
|
56
|
+
let app = null;
|
|
57
|
+
beforeAll(() => __async(exports, null, function* () {
|
|
58
|
+
if (!app) {
|
|
59
|
+
app = yield createApp(
|
|
60
|
+
bff_info.appDir,
|
|
61
|
+
bff_info.modernUserConfig,
|
|
62
|
+
bff_info.plugins,
|
|
63
|
+
bff_info.routes
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
}));
|
|
67
|
+
afterAll(() => __async(exports, null, function* () {
|
|
68
|
+
yield closeServer();
|
|
69
|
+
}));
|
|
70
|
+
mockAPI(apiInfosByFile);
|
|
71
|
+
};
|
|
72
|
+
setup();
|
|
11
73
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const prefix = bff_info === null || bff_info === void 0 ? void 0 : (_bff_info$modernUserC = bff_info.modernUserConfig) === null || _bff_info$modernUserC === void 0 ? void 0 : (_bff_info$modernUserC2 = _bff_info$modernUserC.bff) === null || _bff_info$modernUserC2 === void 0 ? void 0 : _bff_info$modernUserC2.prefix;
|
|
15
|
-
const apiRouter = new ApiRouter({
|
|
16
|
-
apiDir: path.join(bff_info.appDir, './api'),
|
|
17
|
-
prefix
|
|
18
|
-
});
|
|
19
|
-
const apiInfos = apiRouter.getApiHandlers();
|
|
20
|
-
const apiInfosByFile = apiInfos.reduce((res, apiInfo) => {
|
|
21
|
-
if (!res[apiInfo.filename]) {
|
|
22
|
-
res[apiInfo.filename] = [];
|
|
23
|
-
}
|
|
24
|
-
res[apiInfo.filename].push(apiInfo);
|
|
25
|
-
return res;
|
|
26
|
-
}, {});
|
|
27
|
-
let app = null;
|
|
28
|
-
beforeAll(async () => {
|
|
29
|
-
if (!app) {
|
|
30
|
-
app = await createApp(bff_info.appDir, bff_info.modernUserConfig, bff_info.plugins, bff_info.routes);
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
afterAll(async () => {
|
|
34
|
-
await closeServer();
|
|
35
|
-
});
|
|
36
|
-
mockAPI(apiInfosByFile);
|
|
37
|
-
};
|
|
38
|
-
setup();
|
|
74
|
+
});
|
|
75
|
+
export default require_setup();
|
|
@@ -1,21 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
import path from "path";
|
|
18
|
+
import { chalk } from "@modern-js/utils";
|
|
19
|
+
const isBFFProject = (pwd) => {
|
|
7
20
|
try {
|
|
8
|
-
const packageJson = require(path.join(pwd,
|
|
9
|
-
const {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
|
|
21
|
+
const packageJson = require(path.join(pwd, "./package.json"));
|
|
22
|
+
const { dependencies, devDependencies } = packageJson;
|
|
23
|
+
const isBFF = Object.keys(__spreadValues(__spreadValues({}, dependencies), devDependencies)).some(
|
|
24
|
+
(dependency) => dependency.includes("plugin-bff")
|
|
25
|
+
);
|
|
26
|
+
const isMWA = Object.keys(devDependencies).some(
|
|
27
|
+
(devDependency) => devDependency.includes("app-tools")
|
|
28
|
+
);
|
|
15
29
|
return isMWA && isBFF;
|
|
16
30
|
} catch (error) {
|
|
17
|
-
// eslint-disable-next-line no-console
|
|
18
31
|
console.log(chalk.red(error));
|
|
19
32
|
return false;
|
|
20
33
|
}
|
|
21
|
-
};
|
|
34
|
+
};
|
|
35
|
+
export {
|
|
36
|
+
isBFFProject
|
|
37
|
+
};
|
|
@@ -1,80 +1,115 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
var __async = (__this, __arguments, generator) => {
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
var fulfilled = (value) => {
|
|
4
|
+
try {
|
|
5
|
+
step(generator.next(value));
|
|
6
|
+
} catch (e) {
|
|
7
|
+
reject(e);
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
var rejected = (value) => {
|
|
11
|
+
try {
|
|
12
|
+
step(generator.throw(value));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
import path from "path";
|
|
22
|
+
import {
|
|
23
|
+
isApiOnly,
|
|
24
|
+
mergeAlias,
|
|
25
|
+
PLUGIN_SCHEMAS,
|
|
26
|
+
createRuntimeExportsUtils
|
|
27
|
+
} from "@modern-js/utils";
|
|
28
|
+
import {
|
|
29
|
+
testingHooks,
|
|
30
|
+
getModuleNameMapper,
|
|
31
|
+
DEFAULT_RESOLVER_PATH
|
|
32
|
+
} from "../base";
|
|
4
33
|
import { MODERNJS_CONFIG_KEY } from "../constant";
|
|
5
34
|
import TestingBffPlugin from "./bff";
|
|
6
35
|
import test from "./test";
|
|
7
|
-
|
|
36
|
+
const mergeUserJestConfig = (testUtils) => {
|
|
8
37
|
const resolveJestConfig = testUtils.testConfig.jest;
|
|
9
|
-
|
|
10
|
-
// resolveJestConfig 如果是函数类型,在所有测试插件 jestConfig 都执行后,再执行生成最终配置
|
|
11
|
-
if (resolveJestConfig && typeof resolveJestConfig !== 'function') {
|
|
38
|
+
if (resolveJestConfig && typeof resolveJestConfig !== "function") {
|
|
12
39
|
testUtils.mergeJestConfig(resolveJestConfig);
|
|
13
40
|
}
|
|
14
41
|
};
|
|
15
|
-
|
|
42
|
+
var cli_default = () => {
|
|
16
43
|
const BffPlugin = TestingBffPlugin();
|
|
17
44
|
return {
|
|
18
|
-
name:
|
|
45
|
+
name: "@modern-js/plugin-testing",
|
|
19
46
|
usePlugins: [BffPlugin],
|
|
20
47
|
post: [BffPlugin.name],
|
|
21
48
|
registerHook: testingHooks,
|
|
22
|
-
setup: api => {
|
|
49
|
+
setup: (api) => {
|
|
23
50
|
let testingExportsUtils;
|
|
24
51
|
return {
|
|
25
|
-
commands: ({
|
|
26
|
-
program
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
await test(api);
|
|
30
|
-
});
|
|
52
|
+
commands: ({ program }) => {
|
|
53
|
+
program.command("test").allowUnknownOption().usage("<regexForTestFiles> --[options]").action(() => __async(void 0, null, function* () {
|
|
54
|
+
yield test(api);
|
|
55
|
+
}));
|
|
31
56
|
},
|
|
32
57
|
validateSchema() {
|
|
33
|
-
return PLUGIN_SCHEMAS[
|
|
58
|
+
return PLUGIN_SCHEMAS["@modern-js/plugin-testing"];
|
|
34
59
|
},
|
|
35
60
|
config() {
|
|
36
61
|
const appContext = api.useAppContext();
|
|
37
|
-
testingExportsUtils = createRuntimeExportsUtils(
|
|
62
|
+
testingExportsUtils = createRuntimeExportsUtils(
|
|
63
|
+
appContext.internalDirectory,
|
|
64
|
+
"testing"
|
|
65
|
+
);
|
|
38
66
|
return {
|
|
39
67
|
source: {
|
|
40
68
|
alias: {
|
|
41
|
-
|
|
69
|
+
"@": path.join(appContext.appDirectory, "src"),
|
|
70
|
+
"@modern-js/runtime/testing": testingExportsUtils.getPath()
|
|
42
71
|
}
|
|
43
72
|
}
|
|
44
73
|
};
|
|
45
74
|
},
|
|
46
75
|
addRuntimeExports() {
|
|
47
|
-
const testingPath = path.resolve(__dirname,
|
|
76
|
+
const testingPath = path.resolve(__dirname, "../");
|
|
48
77
|
testingExportsUtils.addExport(`export * from '${testingPath}'`);
|
|
49
78
|
},
|
|
50
|
-
jestConfig:
|
|
79
|
+
jestConfig: (utils, next) => __async(void 0, null, function* () {
|
|
51
80
|
const appContext = api.useAppContext();
|
|
52
81
|
const userConfig = api.useResolvedConfigContext();
|
|
53
|
-
const apiOnly =
|
|
82
|
+
const apiOnly = yield isApiOnly(appContext.appDirectory);
|
|
54
83
|
if (apiOnly) {
|
|
55
84
|
return next(utils);
|
|
56
85
|
}
|
|
57
86
|
const alias = mergeAlias(userConfig.source.alias);
|
|
58
87
|
if (testingExportsUtils) {
|
|
59
|
-
alias[
|
|
88
|
+
alias["@modern-js/runtime/testing"] = [
|
|
89
|
+
testingExportsUtils.getPath()
|
|
90
|
+
];
|
|
60
91
|
}
|
|
61
92
|
utils.mergeJestConfig({
|
|
62
93
|
globals: {
|
|
63
94
|
[MODERNJS_CONFIG_KEY]: userConfig
|
|
64
95
|
},
|
|
65
96
|
moduleNameMapper: getModuleNameMapper(alias),
|
|
66
|
-
testEnvironment:
|
|
97
|
+
testEnvironment: "jsdom",
|
|
67
98
|
resolver: DEFAULT_RESOLVER_PATH,
|
|
68
99
|
rootDir: appContext.appDirectory || process.cwd(),
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
100
|
+
testMatch: [
|
|
101
|
+
`<rootDir>/src/**/*.test.[jt]s?(x)`,
|
|
102
|
+
`<rootDir>/tests/**/*.test.[jt]s?(x)`
|
|
103
|
+
]
|
|
73
104
|
});
|
|
74
105
|
mergeUserJestConfig(utils);
|
|
75
106
|
return next(utils);
|
|
76
|
-
}
|
|
107
|
+
})
|
|
77
108
|
};
|
|
78
109
|
}
|
|
79
110
|
};
|
|
80
|
-
}
|
|
111
|
+
};
|
|
112
|
+
export {
|
|
113
|
+
cli_default as default,
|
|
114
|
+
mergeUserJestConfig
|
|
115
|
+
};
|
|
@@ -1,26 +1,61 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __async = (__this, __arguments, generator) => {
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
var fulfilled = (value) => {
|
|
4
|
+
try {
|
|
5
|
+
step(generator.next(value));
|
|
6
|
+
} catch (e) {
|
|
7
|
+
reject(e);
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
var rejected = (value) => {
|
|
11
|
+
try {
|
|
12
|
+
step(generator.throw(value));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
import path from "path";
|
|
22
|
+
import { compiler } from "@modern-js/babel-compiler";
|
|
3
23
|
import { runTest } from "../base";
|
|
4
|
-
const test =
|
|
24
|
+
const test = (api) => __async(void 0, null, function* () {
|
|
25
|
+
var _a, _b;
|
|
5
26
|
const userConfig = api.useResolvedConfigContext();
|
|
6
27
|
const appContext = api.useAppContext();
|
|
7
28
|
userConfig.testing = userConfig.testing || {};
|
|
8
|
-
const jest = userConfig.testing.jest || userConfig.tools.jest;
|
|
29
|
+
const jest = userConfig.testing.jest || ((_a = userConfig == null ? void 0 : userConfig.tools) == null ? void 0 : _a.jest);
|
|
9
30
|
if (Array.isArray(jest)) {
|
|
10
31
|
userConfig.testing.jest = jest[0];
|
|
11
32
|
}
|
|
12
|
-
userConfig.testing.jest = userConfig.testing.jest || userConfig.tools.jest;
|
|
13
|
-
const runtimeExportsPath = path.join(
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
33
|
+
userConfig.testing.jest = userConfig.testing.jest || ((_b = userConfig == null ? void 0 : userConfig.tools) == null ? void 0 : _b.jest);
|
|
34
|
+
const runtimeExportsPath = path.join(
|
|
35
|
+
appContext.internalDirectory,
|
|
36
|
+
".runtime-exports"
|
|
37
|
+
);
|
|
38
|
+
yield compiler(
|
|
39
|
+
{
|
|
40
|
+
sourceDir: runtimeExportsPath,
|
|
41
|
+
rootDir: runtimeExportsPath,
|
|
42
|
+
distDir: runtimeExportsPath,
|
|
43
|
+
quiet: true
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
presets: [
|
|
47
|
+
[
|
|
48
|
+
require.resolve("@babel/preset-env"),
|
|
49
|
+
{
|
|
50
|
+
modules: "cjs"
|
|
51
|
+
}
|
|
52
|
+
]
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
);
|
|
56
|
+
yield runTest(api, userConfig.testing);
|
|
57
|
+
});
|
|
58
|
+
var test_default = test;
|
|
59
|
+
export {
|
|
60
|
+
test_default as default
|
|
25
61
|
};
|
|
26
|
-
export default test;
|
package/dist/js/modern/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
export * from "./runtime-testing";
|
|
1
|
+
import "@testing-library/jest-dom/extend-expect";
|
|
2
|
+
import "@testing-library/jest-dom";
|
|
3
|
+
export * from "./runtime-testing";
|
|
File without changes
|
|
@@ -1,27 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
import { createApp } from "@modern-js/runtime";
|
|
5
18
|
import { MODERNJS_CONFIG_KEY } from "../constant";
|
|
6
19
|
import resolvePlugins from "./resolvePlugins";
|
|
7
20
|
class ModernRuntime {
|
|
8
21
|
constructor(options) {
|
|
9
|
-
_defineProperty(this, "options", void 0);
|
|
10
22
|
this.options = options;
|
|
11
23
|
}
|
|
12
24
|
init(options) {
|
|
13
25
|
this.options = options;
|
|
14
26
|
}
|
|
15
27
|
createApp(props) {
|
|
16
|
-
var
|
|
17
|
-
const {
|
|
18
|
-
|
|
19
|
-
children
|
|
20
|
-
} = props || {};
|
|
21
|
-
let runtimeFeatures = (_this$options = this.options) === null || _this$options === void 0 ? void 0 : _this$options.runtime;
|
|
28
|
+
var _a, _b;
|
|
29
|
+
const { entry, children } = props || {};
|
|
30
|
+
let runtimeFeatures = (_a = this.options) == null ? void 0 : _a.runtime;
|
|
22
31
|
if (entry) {
|
|
23
|
-
|
|
24
|
-
runtimeFeatures = _objectSpread(_objectSpread({}, runtimeFeatures || {}), (_this$options$runtime = this.options.runtimeByEntries) === null || _this$options$runtime === void 0 ? void 0 : _this$options$runtime[entry]);
|
|
32
|
+
runtimeFeatures = __spreadValues(__spreadValues({}, runtimeFeatures || {}), (_b = this.options.runtimeByEntries) == null ? void 0 : _b[entry]);
|
|
25
33
|
}
|
|
26
34
|
const Component = () => {
|
|
27
35
|
if (!children) {
|
|
@@ -34,4 +42,7 @@ class ModernRuntime {
|
|
|
34
42
|
})(Component);
|
|
35
43
|
}
|
|
36
44
|
}
|
|
37
|
-
|
|
45
|
+
var app_default = new ModernRuntime(global[MODERNJS_CONFIG_KEY] || {});
|
|
46
|
+
export {
|
|
47
|
+
app_default as default
|
|
48
|
+
};
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
export * from
|
|
3
|
-
|
|
1
|
+
import { default as default2 } from "./customRender";
|
|
2
|
+
export * from "@testing-library/react";
|
|
3
|
+
import { request } from "./request";
|
|
4
|
+
export {
|
|
5
|
+
default2 as renderApp,
|
|
6
|
+
request as testBff
|
|
7
|
+
};
|