testplane 8.20.6 → 8.21.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/build/package.json +4 -1
- package/build/src/browser/commands/assert-view/assert-view-results.js +2 -0
- package/build/src/browser/commands/assert-view/assert-view-results.js.map +1 -1
- package/build/src/browser/commands/assert-view/capture-processors/assert-refs.d.ts +1 -0
- package/build/src/browser/commands/assert-view/capture-processors/assert-refs.js +4 -0
- package/build/src/browser/commands/assert-view/capture-processors/assert-refs.js.map +1 -1
- package/build/src/browser/commands/assert-view/capture-processors/update-refs.d.ts +3 -0
- package/build/src/browser/commands/assert-view/capture-processors/update-refs.js +7 -4
- package/build/src/browser/commands/assert-view/capture-processors/update-refs.js.map +1 -1
- package/build/src/browser/commands/assert-view/errors/invalid-ref-image-error.d.ts +8 -0
- package/build/src/browser/commands/assert-view/errors/invalid-ref-image-error.js +15 -0
- package/build/src/browser/commands/assert-view/errors/invalid-ref-image-error.js.map +1 -0
- package/build/src/browser/commands/assert-view/index.js +3 -3
- package/build/src/browser/commands/assert-view/index.js.map +1 -1
- package/build/src/index.d.ts +1 -0
- package/build/src/index.js +15 -0
- package/build/src/index.js.map +1 -1
- package/build/src/mock/index.d.ts +4 -0
- package/build/src/mock/index.js +25 -0
- package/build/src/mock/index.js.map +1 -0
- package/build/src/mock/vitest-spy.d.ts +321 -0
- package/build/src/mock/vitest-spy.js +173 -0
- package/build/src/mock/vitest-spy.js.map +1 -0
- package/build/src/runner/browser-env/vite/browser-modules/mock.d.ts +5 -0
- package/build/src/runner/browser-env/vite/browser-modules/mock.js +38 -0
- package/build/src/runner/browser-env/vite/browser-modules/mock.js.map +1 -0
- package/build/src/runner/browser-env/vite/browser-modules/stubs/@wdio-logger.js.map +1 -0
- package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/default-module.js.map +1 -1
- package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/import-meta-resolve.js.map +1 -1
- package/build/src/runner/browser-env/vite/browser-modules/tsconfig.tsbuildinfo +1 -1
- package/build/src/runner/browser-env/vite/browser-modules/types.d.ts +2 -0
- package/build/src/runner/browser-env/vite/constants.d.ts +3 -0
- package/build/src/runner/browser-env/vite/constants.js +4 -1
- package/build/src/runner/browser-env/vite/constants.js.map +1 -1
- package/build/src/runner/browser-env/vite/manual-mock.d.ts +23 -0
- package/build/src/runner/browser-env/vite/manual-mock.js +65 -0
- package/build/src/runner/browser-env/vite/manual-mock.js.map +1 -0
- package/build/src/runner/browser-env/vite/plugins/generate-index-html.js +26 -25
- package/build/src/runner/browser-env/vite/plugins/generate-index-html.js.map +1 -1
- package/build/src/runner/browser-env/vite/plugins/mock.d.ts +3 -0
- package/build/src/runner/browser-env/vite/plugins/mock.js +301 -0
- package/build/src/runner/browser-env/vite/plugins/mock.js.map +1 -0
- package/build/src/runner/browser-env/vite/server.js +8 -1
- package/build/src/runner/browser-env/vite/server.js.map +1 -1
- package/build/src/runner/browser-env/vite/types.d.ts +13 -0
- package/build/src/runner/browser-env/vite/types.js.map +1 -1
- package/build/src/runner/browser-env/vite/utils.d.ts +10 -0
- package/build/src/runner/browser-env/vite/utils.js +31 -1
- package/build/src/runner/browser-env/vite/utils.js.map +1 -1
- package/package.json +4 -1
- package/build/src/browser/commands/assert-view/errors/invalid-png-error.d.ts +0 -5
- package/build/src/browser/commands/assert-view/errors/invalid-png-error.js +0 -9
- package/build/src/browser/commands/assert-view/errors/invalid-png-error.js.map +0 -1
- package/build/src/runner/browser-env/vite/browser-modules/mock/@wdio-logger.js.map +0 -1
- /package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/@wdio-logger.d.ts +0 -0
- /package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/@wdio-logger.js +0 -0
- /package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/default-module.d.ts +0 -0
- /package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/default-module.js +0 -0
- /package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/import-meta-resolve.d.ts +0 -0
- /package/build/src/runner/browser-env/vite/browser-modules/{mock → stubs}/import-meta-resolve.js +0 -0
|
@@ -89,6 +89,7 @@ declare global {
|
|
|
89
89
|
errors: BrowserError[];
|
|
90
90
|
socket: BrowserViteSocket;
|
|
91
91
|
browser: WebdriverIO.Browser;
|
|
92
|
+
mockCache: Map<string, unknown>;
|
|
92
93
|
} & WorkerInitializePayload;
|
|
93
94
|
testplane: typeof Proxy;
|
|
94
95
|
hermione: typeof Proxy;
|
|
@@ -96,3 +97,4 @@ declare global {
|
|
|
96
97
|
expect: Expect;
|
|
97
98
|
}
|
|
98
99
|
}
|
|
100
|
+
export type MockFactory = (originalImport?: unknown) => unknown;
|
|
@@ -12,3 +12,6 @@ export declare const BROWSER_EVENT_PREFIX = "browser";
|
|
|
12
12
|
export declare const SOCKET_MAX_TIMEOUT = 2147483647;
|
|
13
13
|
export declare const SOCKET_TIMED_OUT_ERROR = "operation has timed out";
|
|
14
14
|
export declare const WORKER_ENV_BY_RUN_UUID: Map<string, WorkerInitializePayload>;
|
|
15
|
+
export declare const MOCK_MODULE_NAME = "testplane";
|
|
16
|
+
export declare const DEFAULT_AUTOMOCK = false;
|
|
17
|
+
export declare const DEFAULT_AUTOMOCK_DIRECTORY = "__mocks__";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.WORKER_ENV_BY_RUN_UUID = exports.SOCKET_TIMED_OUT_ERROR = exports.SOCKET_MAX_TIMEOUT = exports.BROWSER_EVENT_PREFIX = exports.VITE_RUN_UUID_ROUTE = exports.VITE_DEFAULT_CONFIG_ENV = exports.MODULE_NAMES = exports.MODULE_PREFIX = void 0;
|
|
3
|
+
exports.DEFAULT_AUTOMOCK_DIRECTORY = exports.DEFAULT_AUTOMOCK = exports.MOCK_MODULE_NAME = exports.WORKER_ENV_BY_RUN_UUID = exports.SOCKET_TIMED_OUT_ERROR = exports.SOCKET_MAX_TIMEOUT = exports.BROWSER_EVENT_PREFIX = exports.VITE_RUN_UUID_ROUTE = exports.VITE_DEFAULT_CONFIG_ENV = exports.MODULE_NAMES = exports.MODULE_PREFIX = void 0;
|
|
4
4
|
exports.MODULE_PREFIX = "@testplane";
|
|
5
5
|
exports.MODULE_NAMES = {
|
|
6
6
|
mocha: `${exports.MODULE_PREFIX}/mocha`,
|
|
@@ -16,4 +16,7 @@ exports.BROWSER_EVENT_PREFIX = "browser";
|
|
|
16
16
|
exports.SOCKET_MAX_TIMEOUT = 2147483647;
|
|
17
17
|
exports.SOCKET_TIMED_OUT_ERROR = "operation has timed out";
|
|
18
18
|
exports.WORKER_ENV_BY_RUN_UUID = new Map();
|
|
19
|
+
exports.MOCK_MODULE_NAME = "testplane";
|
|
20
|
+
exports.DEFAULT_AUTOMOCK = false;
|
|
21
|
+
exports.DEFAULT_AUTOMOCK_DIRECTORY = "__mocks__";
|
|
19
22
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../src/runner/browser-env/vite/constants.ts"],"names":[],"mappings":";;;AAGa,QAAA,aAAa,GAAG,YAAY,CAAC;AAC7B,QAAA,YAAY,GAAG;IACxB,KAAK,EAAE,GAAG,qBAAa,QAAQ;IAC/B,aAAa,EAAE,GAAG,qBAAa,iBAAiB;IAChD,OAAO,EAAE,GAAG,qBAAa,UAAU;CACtC,CAAC;AAEW,QAAA,uBAAuB,GAAc;IAC9C,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa;CAC7E,CAAC;AACW,QAAA,mBAAmB,GAAG,WAAW,CAAC;AAElC,QAAA,oBAAoB,GAAG,SAAS,CAAC;AAEjC,QAAA,kBAAkB,GAAG,UAAU,CAAC;AAChC,QAAA,sBAAsB,GAAG,yBAAyB,CAAC;AAEnD,QAAA,sBAAsB,GAAG,IAAI,GAAG,EAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../src/runner/browser-env/vite/constants.ts"],"names":[],"mappings":";;;AAGa,QAAA,aAAa,GAAG,YAAY,CAAC;AAC7B,QAAA,YAAY,GAAG;IACxB,KAAK,EAAE,GAAG,qBAAa,QAAQ;IAC/B,aAAa,EAAE,GAAG,qBAAa,iBAAiB;IAChD,OAAO,EAAE,GAAG,qBAAa,UAAU;CACtC,CAAC;AAEW,QAAA,uBAAuB,GAAc;IAC9C,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa;CAC7E,CAAC;AACW,QAAA,mBAAmB,GAAG,WAAW,CAAC;AAElC,QAAA,oBAAoB,GAAG,SAAS,CAAC;AAEjC,QAAA,kBAAkB,GAAG,UAAU,CAAC;AAChC,QAAA,sBAAsB,GAAG,yBAAyB,CAAC;AAEnD,QAAA,sBAAsB,GAAG,IAAI,GAAG,EAAmC,CAAC;AAEpE,QAAA,gBAAgB,GAAG,WAAW,CAAC;AAE/B,QAAA,gBAAgB,GAAG,KAAK,CAAC;AACzB,QAAA,0BAA0B,GAAG,WAAW,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { InlineConfig } from "vite";
|
|
2
|
+
import type { BrowserTestRunEnvOptions } from "./types";
|
|
3
|
+
type MockOnFs = {
|
|
4
|
+
fullPath: string;
|
|
5
|
+
moduleName: string;
|
|
6
|
+
};
|
|
7
|
+
type ManualMockOptions = {
|
|
8
|
+
automock: boolean;
|
|
9
|
+
mocksOnFs: MockOnFs[];
|
|
10
|
+
};
|
|
11
|
+
export declare class ManualMock {
|
|
12
|
+
private _automock;
|
|
13
|
+
private _mocksOnFs;
|
|
14
|
+
private _mocks;
|
|
15
|
+
private _unmocks;
|
|
16
|
+
static create<T extends ManualMock>(this: new (opts: ManualMockOptions) => T, config: Partial<InlineConfig>, options?: BrowserTestRunEnvOptions): Promise<T>;
|
|
17
|
+
constructor(options: ManualMockOptions);
|
|
18
|
+
resolveId(id: string): Promise<string | void>;
|
|
19
|
+
mock(moduleName: string): void;
|
|
20
|
+
unmock(moduleName: string): void;
|
|
21
|
+
resetMocks(): void;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ManualMock = void 0;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
9
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
10
|
+
const constants_1 = require("./constants");
|
|
11
|
+
class ManualMock {
|
|
12
|
+
static async create(config, options) {
|
|
13
|
+
const automock = typeof options?.automock === "boolean" ? options?.automock : constants_1.DEFAULT_AUTOMOCK;
|
|
14
|
+
const automockDir = node_path_1.default.resolve(config?.root || "", options?.automockDir || constants_1.DEFAULT_AUTOMOCK_DIRECTORY);
|
|
15
|
+
const mocksOnFs = await getMocksOnFs(automockDir);
|
|
16
|
+
return new this({ automock, mocksOnFs });
|
|
17
|
+
}
|
|
18
|
+
constructor(options) {
|
|
19
|
+
this._automock = options.automock;
|
|
20
|
+
this._mocksOnFs = options.mocksOnFs;
|
|
21
|
+
this._mocks = [];
|
|
22
|
+
this._unmocks = [];
|
|
23
|
+
}
|
|
24
|
+
async resolveId(id) {
|
|
25
|
+
const foundMockOnFs = this._mocksOnFs.find(mock => id === mock.moduleName);
|
|
26
|
+
if ((this._mocks.includes(id) || this._automock) && foundMockOnFs && !this._unmocks.includes(id)) {
|
|
27
|
+
return foundMockOnFs.fullPath;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
mock(moduleName) {
|
|
31
|
+
this._mocks.push(moduleName);
|
|
32
|
+
}
|
|
33
|
+
unmock(moduleName) {
|
|
34
|
+
this._unmocks.push(moduleName);
|
|
35
|
+
}
|
|
36
|
+
resetMocks() {
|
|
37
|
+
this._mocks = [];
|
|
38
|
+
this._unmocks = [];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.ManualMock = ManualMock;
|
|
42
|
+
async function getMocksOnFs(automockDir) {
|
|
43
|
+
const mockedModules = await getFilesFromDirectory(automockDir);
|
|
44
|
+
return mockedModules.map(filePath => {
|
|
45
|
+
const extName = node_path_1.default.extname(filePath);
|
|
46
|
+
return {
|
|
47
|
+
fullPath: filePath,
|
|
48
|
+
moduleName: filePath.slice(automockDir.length + 1, -extName.length),
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
async function getFilesFromDirectory(dir) {
|
|
53
|
+
const isDirExists = await promises_1.default.access(dir).then(() => true, () => false);
|
|
54
|
+
if (!isDirExists) {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
const files = await promises_1.default.readdir(dir);
|
|
58
|
+
const allFiles = await Promise.all(files.map(async (file) => {
|
|
59
|
+
const filePath = node_path_1.default.join(dir, file);
|
|
60
|
+
const stats = await promises_1.default.stat(filePath);
|
|
61
|
+
return stats.isDirectory() ? getFilesFromDirectory(filePath) : filePath;
|
|
62
|
+
}));
|
|
63
|
+
return lodash_1.default.flatten(allFiles).filter(Boolean);
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=manual-mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manual-mock.js","sourceRoot":"","sources":["../../../../../src/runner/browser-env/vite/manual-mock.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ const polyfill_1 = require("../polyfill");
|
|
|
15
15
|
const logger_1 = __importDefault(require("../../../../utils/logger"));
|
|
16
16
|
const debug = (0, debug_1.default)("vite:plugin:generateIndexHtml");
|
|
17
17
|
// modules that used only in NodeJS environment and don't need to be compiled
|
|
18
|
-
const
|
|
18
|
+
const DEFAULT_MODULES_TO_STUB = ["puppeteer-core", "archiver", "@wdio/repl", "jszip"];
|
|
19
19
|
const POLYFILLS = [...node_module_1.builtinModules, ...node_module_1.builtinModules.map(m => `node:${m}`)];
|
|
20
20
|
const virtualDriverModuleId = "virtual:@testplane/driver";
|
|
21
21
|
const virtualModules = {
|
|
@@ -35,13 +35,14 @@ const plugin = async () => {
|
|
|
35
35
|
const browserRunnerModulePath = node_path_1.default.resolve(browserModulesPath, "index.js");
|
|
36
36
|
const globalsModulePath = node_path_1.default.resolve(browserModulesPath, "globals.js");
|
|
37
37
|
const driverModulePath = node_path_1.default.resolve(browserModulesPath, "driver.js");
|
|
38
|
+
const mockModulePath = node_path_1.default.resolve(browserModulesPath, "mock.js");
|
|
38
39
|
const automationProtocolPath = `/@fs${driverModulePath}`;
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
"@wdio/logger":
|
|
44
|
-
"import-meta-resolve":
|
|
40
|
+
const stubDefaultModulePath = node_path_1.default.resolve(browserModulesPath, "stubs/default-module.js");
|
|
41
|
+
const stubImportMetaResolvePath = node_path_1.default.resolve(browserModulesPath, "stubs/import-meta-resolve.js");
|
|
42
|
+
const stubWdioLoggerPath = node_path_1.default.resolve(browserModulesPath, "stubs/@wdio-logger.js");
|
|
43
|
+
const modulesToStub = DEFAULT_MODULES_TO_STUB.reduce((acc, val) => lodash_1.default.set(acc, val, stubDefaultModulePath), {
|
|
44
|
+
"@wdio/logger": stubWdioLoggerPath,
|
|
45
|
+
"import-meta-resolve": stubImportMetaResolvePath,
|
|
45
46
|
});
|
|
46
47
|
return [
|
|
47
48
|
{
|
|
@@ -51,24 +52,12 @@ const plugin = async () => {
|
|
|
51
52
|
return () => {
|
|
52
53
|
server.middlewares.use(async (req, res, next) => {
|
|
53
54
|
debug(`Received request for: ${req.originalUrl}`);
|
|
54
|
-
if (!req.url?.endsWith("index.html") || !req.originalUrl) {
|
|
55
|
-
return next();
|
|
56
|
-
}
|
|
57
|
-
const parsedUrl = node_url_1.default.parse(req.originalUrl);
|
|
58
|
-
const [routeName, runUuid] = lodash_1.default.compact(parsedUrl.pathname?.split("/"));
|
|
59
55
|
try {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const env = constants_1.WORKER_ENV_BY_RUN_UUID.get(runUuid);
|
|
64
|
-
if (!env) {
|
|
65
|
-
throw new Error(`Worker environment is not found by "${runUuid}". ` +
|
|
66
|
-
"This is possible if:\n" +
|
|
67
|
-
' - "runUuid" is not generated by Testplane\n' +
|
|
68
|
-
" - the test has already been completed\n" +
|
|
69
|
-
" - worker was disconnected");
|
|
56
|
+
const testInfo = (0, utils_1.getTestInfoFromViteRequest)(req);
|
|
57
|
+
if (!testInfo) {
|
|
58
|
+
return next();
|
|
70
59
|
}
|
|
71
|
-
const template = generateTemplate(env, runUuid);
|
|
60
|
+
const template = generateTemplate(testInfo.env, testInfo.runUuid);
|
|
72
61
|
res.end(await server.transformIndexHtml(`${req.originalUrl}`, template));
|
|
73
62
|
}
|
|
74
63
|
catch (err) {
|
|
@@ -84,6 +73,10 @@ const plugin = async () => {
|
|
|
84
73
|
if (id === virtualModules.driver.id) {
|
|
85
74
|
return virtualModules.driver.resolvedId;
|
|
86
75
|
}
|
|
76
|
+
// fake module and load the implementation of the browser mock
|
|
77
|
+
if (id === constants_1.MOCK_MODULE_NAME) {
|
|
78
|
+
return mockModulePath;
|
|
79
|
+
}
|
|
87
80
|
if (id.endsWith(constants_1.MODULE_NAMES.browserRunner)) {
|
|
88
81
|
return browserRunnerModulePath;
|
|
89
82
|
}
|
|
@@ -96,8 +89,8 @@ const plugin = async () => {
|
|
|
96
89
|
if (POLYFILLS.includes(id)) {
|
|
97
90
|
return (0, polyfill_1.polyfillPath)(id.replace("/promises", ""));
|
|
98
91
|
}
|
|
99
|
-
if (Object.keys(
|
|
100
|
-
return
|
|
92
|
+
if (Object.keys(modulesToStub).includes(id)) {
|
|
93
|
+
return modulesToStub[id];
|
|
101
94
|
}
|
|
102
95
|
},
|
|
103
96
|
load: (id) => {
|
|
@@ -126,6 +119,14 @@ function generateTemplate(env, runUuid) {
|
|
|
126
119
|
<link rel="icon" href="https://testplane.io/img/favicon.ico">
|
|
127
120
|
<script type="module">
|
|
128
121
|
window.__testplane__ = ${JSON.stringify({ runUuid, ...env })};
|
|
122
|
+
window.__testplane__.mockCache = new Map();
|
|
123
|
+
window.importWithMock = function(modName, mod) {
|
|
124
|
+
if (window.__testplane__.mockCache.has(modName)) {
|
|
125
|
+
return window.__testplane__.mockCache.get(modName);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return mod;
|
|
129
|
+
}
|
|
129
130
|
</script>
|
|
130
131
|
<script type="module" src="${constants_1.MODULE_NAMES.globals}"></script>
|
|
131
132
|
<script type="module" src="${constants_1.MODULE_NAMES.mocha}"></script>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-index-html.js","sourceRoot":"","sources":["../../../../../../src/runner/browser-env/vite/plugins/generate-index-html.ts"],"names":[],"mappings":";;;;;;AAAA,0DAA6B;AAC7B,wDAA2B;AAC3B,6CAA6C;AAC7C,oDAAuB;AACvB,kDAAgC;AAChC,
|
|
1
|
+
{"version":3,"file":"generate-index-html.js","sourceRoot":"","sources":["../../../../../../src/runner/browser-env/vite/plugins/generate-index-html.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.plugin = void 0;
|
|
7
|
+
const node_url_1 = __importDefault(require("node:url"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const debug_1 = __importDefault(require("debug"));
|
|
10
|
+
const recast_1 = require("recast");
|
|
11
|
+
const logger_1 = __importDefault(require("../../../../utils/logger"));
|
|
12
|
+
const constants_1 = require("../constants");
|
|
13
|
+
const utils_1 = require("../utils");
|
|
14
|
+
const debug = (0, debug_1.default)("vite:plugin:mock");
|
|
15
|
+
const b = recast_1.types.builders;
|
|
16
|
+
const plugin = (manualMock) => {
|
|
17
|
+
const registeredMocks = new Set();
|
|
18
|
+
const testFileMocks = new Map();
|
|
19
|
+
let testFilePath = null;
|
|
20
|
+
return [
|
|
21
|
+
{
|
|
22
|
+
name: "testplane:manual-mock",
|
|
23
|
+
enforce: "pre",
|
|
24
|
+
resolveId: manualMock.resolveId.bind(manualMock),
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: "testplane:mock",
|
|
28
|
+
enforce: "post",
|
|
29
|
+
configureServer(server) {
|
|
30
|
+
return () => {
|
|
31
|
+
server.middlewares.use("/", async (req, _res, next) => {
|
|
32
|
+
const testInfo = (0, utils_1.getTestInfoFromViteRequest)(req);
|
|
33
|
+
if (!testInfo) {
|
|
34
|
+
return next();
|
|
35
|
+
}
|
|
36
|
+
testFilePath = testInfo.env?.file;
|
|
37
|
+
manualMock.resetMocks();
|
|
38
|
+
return next();
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
transform(code, id) {
|
|
43
|
+
const isTestModule = testFilePath === id;
|
|
44
|
+
if (!isTestModule) {
|
|
45
|
+
const isModuleFromNodeModules = id.includes("/node_modules/");
|
|
46
|
+
const isVirtualModule = id.startsWith("virtual:");
|
|
47
|
+
const hasRegisteredMocks = registeredMocks.size > 0;
|
|
48
|
+
if (isModuleFromNodeModules || isVirtualModule || !hasRegisteredMocks) {
|
|
49
|
+
return { code };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
let ast;
|
|
53
|
+
const start = Date.now();
|
|
54
|
+
try {
|
|
55
|
+
ast = (0, recast_1.parse)(code, {
|
|
56
|
+
parser: require("recast/parsers/typescript"),
|
|
57
|
+
sourceFileName: id,
|
|
58
|
+
sourceRoot: node_path_1.default.dirname(id),
|
|
59
|
+
});
|
|
60
|
+
debug(`Parsed file for mocking: ${id} in ${Date.now() - start}ms`);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
logger_1.default.error(`Failed to parse file ${id}: ${err.stack}`);
|
|
64
|
+
return { code };
|
|
65
|
+
}
|
|
66
|
+
const state = {
|
|
67
|
+
importIndex: 0,
|
|
68
|
+
mockFnName: "",
|
|
69
|
+
unmockFnName: "",
|
|
70
|
+
mockCalls: [],
|
|
71
|
+
};
|
|
72
|
+
const testModuleVisitorMethods = isTestModule
|
|
73
|
+
? { visitExpressionStatement: handleMockCalls({ state, registeredMocks, manualMock }) }
|
|
74
|
+
: {};
|
|
75
|
+
(0, recast_1.visit)(ast, {
|
|
76
|
+
visitImportDeclaration: handleModuleImportWithMocks(state),
|
|
77
|
+
...testModuleVisitorMethods,
|
|
78
|
+
});
|
|
79
|
+
(0, recast_1.visit)(ast, {
|
|
80
|
+
visitImportDeclaration: rewriteImportDeclaration({
|
|
81
|
+
state,
|
|
82
|
+
id,
|
|
83
|
+
testFilePath,
|
|
84
|
+
isTestModule,
|
|
85
|
+
registeredMocks,
|
|
86
|
+
testFileMocks,
|
|
87
|
+
}),
|
|
88
|
+
});
|
|
89
|
+
const preparedMockCalls = state.mockCalls.map(mockCall => {
|
|
90
|
+
const exp = mockCall;
|
|
91
|
+
if (!isCallExpression(exp)) {
|
|
92
|
+
return mockCall;
|
|
93
|
+
}
|
|
94
|
+
const mockCallExpression = exp.expression;
|
|
95
|
+
const mockModuleName = mockCallExpression.arguments[0]
|
|
96
|
+
.value;
|
|
97
|
+
if (testFileMocks.has(mockModuleName)) {
|
|
98
|
+
mockCallExpression.arguments.push(b.identifier(testFileMocks.get(mockModuleName)));
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
throw new Error(`Cannot find mocked module "${mockModuleName}"`);
|
|
102
|
+
}
|
|
103
|
+
return b.expressionStatement(b.awaitExpression(mockCallExpression));
|
|
104
|
+
});
|
|
105
|
+
ast.program.body.unshift(...preparedMockCalls);
|
|
106
|
+
try {
|
|
107
|
+
const newCode = (0, recast_1.print)(ast, { sourceMapName: id });
|
|
108
|
+
debug(`Transformed file for mocking: ${id} in ${Date.now() - start}ms`);
|
|
109
|
+
return newCode;
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
logger_1.default.error(`Failed to transform file ${id} for mocking: ${err.stack}`);
|
|
113
|
+
return { code };
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
];
|
|
118
|
+
};
|
|
119
|
+
exports.plugin = plugin;
|
|
120
|
+
/**
|
|
121
|
+
* Find import module with mocks and save name for mock and unmock calls
|
|
122
|
+
*/
|
|
123
|
+
function handleModuleImportWithMocks(state) {
|
|
124
|
+
return function (nodePath) {
|
|
125
|
+
const declaration = nodePath.value;
|
|
126
|
+
const source = declaration.source.value;
|
|
127
|
+
const specifiers = declaration.specifiers;
|
|
128
|
+
if (!specifiers || specifiers.length === 0 || source !== constants_1.MOCK_MODULE_NAME) {
|
|
129
|
+
return this.traverse(nodePath);
|
|
130
|
+
}
|
|
131
|
+
const mockSpecifier = specifiers
|
|
132
|
+
.filter(s => s.type === recast_1.types.namedTypes.ImportSpecifier.toString())
|
|
133
|
+
.find(s => s.imported.name === "mock");
|
|
134
|
+
if (mockSpecifier && mockSpecifier.local) {
|
|
135
|
+
state.mockFnName = mockSpecifier.local.name;
|
|
136
|
+
}
|
|
137
|
+
const unmockSpecifier = declaration.specifiers
|
|
138
|
+
.filter(s => s.type === recast_1.types.namedTypes.ImportSpecifier.toString())
|
|
139
|
+
.find(s => s.imported.name === "unmock");
|
|
140
|
+
if (unmockSpecifier && unmockSpecifier.local) {
|
|
141
|
+
state.unmockFnName = unmockSpecifier.local.name;
|
|
142
|
+
}
|
|
143
|
+
// Move import module with mocks to the top of the file
|
|
144
|
+
state.mockCalls.push(declaration);
|
|
145
|
+
nodePath.prune();
|
|
146
|
+
return this.traverse(nodePath);
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Detect which modules are supposed to be mocked
|
|
151
|
+
*/
|
|
152
|
+
function handleMockCalls({ state, registeredMocks, manualMock, }) {
|
|
153
|
+
return function (nodePath) {
|
|
154
|
+
const exp = nodePath.value;
|
|
155
|
+
if (exp.expression.type !== recast_1.types.namedTypes.CallExpression.toString()) {
|
|
156
|
+
return this.traverse(nodePath);
|
|
157
|
+
}
|
|
158
|
+
const callExp = exp.expression;
|
|
159
|
+
const isMockCall = Boolean(state.mockFnName) && callExp.callee.name === state.mockFnName;
|
|
160
|
+
const isUnmockCall = Boolean(state.unmockFnName) && callExp.callee.name === state.unmockFnName;
|
|
161
|
+
if (!isMockCall && !isUnmockCall) {
|
|
162
|
+
return this.traverse(nodePath);
|
|
163
|
+
}
|
|
164
|
+
if (isUnmockCall &&
|
|
165
|
+
callExp.arguments[0] &&
|
|
166
|
+
typeof callExp.arguments[0].value === "string") {
|
|
167
|
+
manualMock.unmock(callExp.arguments[0].value);
|
|
168
|
+
}
|
|
169
|
+
if (isMockCall) {
|
|
170
|
+
const mockCall = exp.expression;
|
|
171
|
+
if (mockCall.arguments.length === 1) {
|
|
172
|
+
manualMock.mock(mockCall.arguments[0].value);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
if (exp.expression.arguments.length) {
|
|
176
|
+
registeredMocks.add(exp.expression.arguments[0]
|
|
177
|
+
.value);
|
|
178
|
+
}
|
|
179
|
+
state.mockCalls.push(exp);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// Remove original node from ast
|
|
183
|
+
nodePath.prune();
|
|
184
|
+
return this.traverse(nodePath);
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Rewrite import declarations in test file and its dependencies in order to use user mocks instead original module.
|
|
189
|
+
* Exmample in test file:
|
|
190
|
+
*
|
|
191
|
+
* From:
|
|
192
|
+
* import {fn, mock} from "testplane/mock";
|
|
193
|
+
* import {foo} from "bar";
|
|
194
|
+
* import {handleClick} from "./utils";
|
|
195
|
+
* mock("./utils", () => ({handleClick: fn()});
|
|
196
|
+
*
|
|
197
|
+
* To:
|
|
198
|
+
* import * as __testplane_import_0__ from "./utils"; // move import of mocked module to the top
|
|
199
|
+
* await mock("utils", () => ({handleClick: fn()}, __testplane_import_0__); // move right after import original module (will call `mock` from `vite/browser-modules/mock.ts`)
|
|
200
|
+
* const {foo} = await import("bar"); // transform to import expression in order to import it only after mock module
|
|
201
|
+
* const {handleClick} = importWithMock("/Users/../utils", __testplane_import_0__); // use importWithMock helper in order to get mocked module
|
|
202
|
+
}));
|
|
203
|
+
*/
|
|
204
|
+
function rewriteImportDeclaration({ state, id, testFilePath, isTestModule, registeredMocks, testFileMocks, }) {
|
|
205
|
+
return function (nodePath) {
|
|
206
|
+
const declaration = nodePath.value;
|
|
207
|
+
const source = declaration.source.value;
|
|
208
|
+
if (!declaration.specifiers || declaration.specifiers.length === 0) {
|
|
209
|
+
return this.traverse(nodePath);
|
|
210
|
+
}
|
|
211
|
+
const absImportPath = node_path_1.default.resolve(node_path_1.default.dirname(id), source);
|
|
212
|
+
const absImportPathWithoutExtName = (0, utils_1.getPathWithoutExtName)(absImportPath);
|
|
213
|
+
const isModuleMockedRelatively = Boolean(source.startsWith(".") &&
|
|
214
|
+
[...registeredMocks.values()].find(m => {
|
|
215
|
+
const absMockPath = node_path_1.default.resolve(node_path_1.default.dirname(testFilePath || "/"), m);
|
|
216
|
+
const absMockPathWithoutExtName = (0, utils_1.getPathWithoutExtName)(absMockPath);
|
|
217
|
+
return absImportPathWithoutExtName === absMockPathWithoutExtName;
|
|
218
|
+
}));
|
|
219
|
+
const isModuleMocked = isModuleMockedRelatively || registeredMocks.has(source);
|
|
220
|
+
const newImportIdentifier = genImportIdentifier(state);
|
|
221
|
+
if (isTestModule && isModuleMocked) {
|
|
222
|
+
testFileMocks.set(source, newImportIdentifier);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Use import with custom namespace specifier for mocked module
|
|
226
|
+
*
|
|
227
|
+
* From:
|
|
228
|
+
* import {handleClick} from "./utils";
|
|
229
|
+
*
|
|
230
|
+
* To:
|
|
231
|
+
* import * as __testplane_import_0__ from "./utils";
|
|
232
|
+
*/
|
|
233
|
+
if (isModuleMocked) {
|
|
234
|
+
const newNode = b.importDeclaration([b.importNamespaceSpecifier(b.identifier(newImportIdentifier))], b.literal(source));
|
|
235
|
+
// should be specified first in order to correctly mock module
|
|
236
|
+
state.mockCalls.unshift(newNode);
|
|
237
|
+
}
|
|
238
|
+
let mockImport;
|
|
239
|
+
/**
|
|
240
|
+
* Transform import mocked module to use helper `importWithMock` in order to get mocked implementation
|
|
241
|
+
*
|
|
242
|
+
* From:
|
|
243
|
+
* import {handleClick} from "./utils";
|
|
244
|
+
*
|
|
245
|
+
* To:
|
|
246
|
+
* import * as __testplane_import_0__ from "./utils"; // from code above
|
|
247
|
+
* const { handleClick } = await importWithMock("./utils", __testplane_import_0__);
|
|
248
|
+
*/
|
|
249
|
+
if (isModuleMocked) {
|
|
250
|
+
const mockModuleIdentifier = source.startsWith(".") || source.startsWith("/")
|
|
251
|
+
? node_url_1.default.pathToFileURL(absImportPathWithoutExtName).pathname
|
|
252
|
+
: source;
|
|
253
|
+
const variableValue = b.callExpression(b.identifier("importWithMock"), [
|
|
254
|
+
b.literal(mockModuleIdentifier),
|
|
255
|
+
b.identifier(newImportIdentifier),
|
|
256
|
+
]);
|
|
257
|
+
mockImport = b.variableDeclaration("const", [
|
|
258
|
+
b.variableDeclarator(genVarDeclKey(declaration), variableValue),
|
|
259
|
+
]);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Transform not mocked import declarations to import expressions only in test file.
|
|
263
|
+
* In order to hoist `mock(...)` calls and run them before another dependencies.
|
|
264
|
+
*
|
|
265
|
+
* From:
|
|
266
|
+
* import {foo} from "bar";
|
|
267
|
+
*
|
|
268
|
+
* To:
|
|
269
|
+
* const {foo} = await import("bar");
|
|
270
|
+
*/
|
|
271
|
+
if (isTestModule && !isModuleMocked) {
|
|
272
|
+
mockImport = b.variableDeclaration("const", [
|
|
273
|
+
b.variableDeclarator(genVarDeclKey(declaration), b.awaitExpression(b.importExpression(b.literal(source)))),
|
|
274
|
+
]);
|
|
275
|
+
}
|
|
276
|
+
if (mockImport) {
|
|
277
|
+
nodePath.replace(mockImport);
|
|
278
|
+
}
|
|
279
|
+
return this.traverse(nodePath);
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
function genVarDeclKey(declaration) {
|
|
283
|
+
const isNamespaceImport = declaration.specifiers?.length === 1 &&
|
|
284
|
+
declaration.specifiers[0].type === recast_1.types.namedTypes.ImportNamespaceSpecifier.toString();
|
|
285
|
+
if (isNamespaceImport) {
|
|
286
|
+
return declaration.specifiers[0].local;
|
|
287
|
+
}
|
|
288
|
+
return b.objectPattern(declaration.specifiers.map(s => {
|
|
289
|
+
if (s.type === recast_1.types.namedTypes.ImportDefaultSpecifier.toString()) {
|
|
290
|
+
return b.property("init", b.identifier("default"), b.identifier(s.local.name));
|
|
291
|
+
}
|
|
292
|
+
return b.property("init", b.identifier(s.imported.name), b.identifier(s.local.name));
|
|
293
|
+
}));
|
|
294
|
+
}
|
|
295
|
+
function genImportIdentifier(state) {
|
|
296
|
+
return `__testplane_import_${state.importIndex++}__`;
|
|
297
|
+
}
|
|
298
|
+
function isCallExpression(exp) {
|
|
299
|
+
return exp.expression && exp.expression.type === recast_1.types.namedTypes.CallExpression.toString();
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.js","sourceRoot":"","sources":["../../../../../../src/runner/browser-env/vite/plugins/mock.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,8 @@ const chalk_1 = __importDefault(require("chalk"));
|
|
|
37
37
|
const logger_1 = __importDefault(require("../../../utils/logger"));
|
|
38
38
|
const socket_1 = require("./socket");
|
|
39
39
|
const generate_index_html_1 = require("./plugins/generate-index-html");
|
|
40
|
+
const mock_1 = require("./plugins/mock");
|
|
41
|
+
const manual_mock_1 = require("./manual-mock");
|
|
40
42
|
const constants_1 = require("./constants");
|
|
41
43
|
class ViteServer {
|
|
42
44
|
static create(testplaneConfig) {
|
|
@@ -107,7 +109,12 @@ class ViteServer {
|
|
|
107
109
|
this._viteConfig = lodash_1.default.merge(this._viteConfig, preparedConfig);
|
|
108
110
|
}
|
|
109
111
|
async _addRequiredVitePlugins() {
|
|
110
|
-
|
|
112
|
+
const manualMock = await manual_mock_1.ManualMock.create(this._viteConfig, this._options);
|
|
113
|
+
this._viteConfig.plugins = [
|
|
114
|
+
...(this._viteConfig.plugins || []),
|
|
115
|
+
await (0, generate_index_html_1.plugin)(),
|
|
116
|
+
(0, mock_1.plugin)(manualMock),
|
|
117
|
+
];
|
|
111
118
|
}
|
|
112
119
|
get baseUrl() {
|
|
113
120
|
return this._server?.resolvedUrls.local[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../../src/runner/browser-env/vite/server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8BAA8B;AAC9B,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,GAAG,CAAC;AAE1C,0DAA6B;AAC7B,+BAAoC;AACpC,oDAAuB;AACvB,wDAA+B;AAC/B,kDAA0B;AAE1B,mEAA2C;AAC3C,qCAA8C;AAC9C,uEAA4E;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../../src/runner/browser-env/vite/server.ts"],"names":[],"mappings":"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"}
|