@vitest/browser 3.0.0-beta.1 → 3.0.0-beta.3
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/context.d.ts +17 -0
- package/dist/client/.vite/manifest.json +2 -2
- package/dist/client/__vitest__/assets/{index-DYFkX02J.css → index-D1v_Nqq1.css} +1 -1
- package/dist/client/__vitest__/assets/{index-DgyW9gjj.js → index-JmEkKNR0.js} +27 -27
- package/dist/client/__vitest__/index.html +2 -2
- package/dist/client/__vitest_browser__/{orchestrator-DnP17K36.js → orchestrator-vOivV83Y.js} +7 -5
- package/dist/client/__vitest_browser__/{tester-D_NUSQO8.js → tester-CDBn6hqf.js} +19 -10
- package/dist/client/esm-client-injector.js +1 -1
- package/dist/client/orchestrator.html +1 -1
- package/dist/client/tester/tester.html +1 -1
- package/dist/client.js +4 -4
- package/dist/context.js +88 -23
- package/dist/{index-CKtADM3n.js → index-VFFcOojA.js} +8 -2
- package/dist/index.d.ts +52 -34
- package/dist/index.js +2417 -1960
- package/dist/locators/index.d.ts +2 -0
- package/dist/locators/index.js +1 -1
- package/dist/locators/playwright.js +1 -1
- package/dist/locators/preview.js +11 -34
- package/dist/locators/webdriverio.js +1 -1
- package/dist/providers.js +3 -3
- package/dist/state.js +1 -1
- package/dist/{webdriver-JzwxG3Ek.js → webdriver-dkCg9pjp.js} +22 -22
- package/package.json +14 -14
- package/providers/webdriverio.d.ts +1 -1
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
})();
|
|
24
24
|
</script>
|
|
25
25
|
<!-- !LOAD_METADATA! -->
|
|
26
|
-
<script type="module" src="./assets/index-
|
|
27
|
-
<link rel="stylesheet" href="./assets/index-
|
|
26
|
+
<script type="module" src="./assets/index-JmEkKNR0.js"></script>
|
|
27
|
+
<link rel="stylesheet" href="./assets/index-D1v_Nqq1.css">
|
|
28
28
|
</head>
|
|
29
29
|
<body>
|
|
30
30
|
<div id="app"></div>
|
package/dist/client/__vitest_browser__/{orchestrator-DnP17K36.js → orchestrator-vOivV83Y.js}
RENAMED
|
@@ -26,8 +26,7 @@ class IframeOrchestrator {
|
|
|
26
26
|
__publicField(this, "runningFiles", /* @__PURE__ */ new Set());
|
|
27
27
|
__publicField(this, "iframes", /* @__PURE__ */ new Map());
|
|
28
28
|
}
|
|
29
|
-
async init() {
|
|
30
|
-
const testFiles = getBrowserState().files;
|
|
29
|
+
async init(testFiles) {
|
|
31
30
|
debug("test files", testFiles.join(", "));
|
|
32
31
|
this.runningFiles.clear();
|
|
33
32
|
testFiles.forEach((file) => this.runningFiles.add(file));
|
|
@@ -45,6 +44,7 @@ class IframeOrchestrator {
|
|
|
45
44
|
this.runningFiles.clear();
|
|
46
45
|
testFiles.forEach((file) => this.runningFiles.add(file));
|
|
47
46
|
const config = getConfig();
|
|
47
|
+
debug("create testers", testFiles.join(", "));
|
|
48
48
|
const container = await getContainer(config);
|
|
49
49
|
if (config.browser.ui) {
|
|
50
50
|
container.className = "absolute origin-top mt-[8px]";
|
|
@@ -55,6 +55,7 @@ class IframeOrchestrator {
|
|
|
55
55
|
this.iframes.forEach((iframe) => iframe.remove());
|
|
56
56
|
this.iframes.clear();
|
|
57
57
|
if (config.isolate === false) {
|
|
58
|
+
debug("create iframe", ID_ALL);
|
|
58
59
|
const iframe = this.createIframe(container, ID_ALL);
|
|
59
60
|
await setIframeViewport(iframe, width, height);
|
|
60
61
|
return;
|
|
@@ -64,6 +65,7 @@ class IframeOrchestrator {
|
|
|
64
65
|
done();
|
|
65
66
|
return;
|
|
66
67
|
}
|
|
68
|
+
debug("create iframe", file);
|
|
67
69
|
const iframe = this.createIframe(container, file);
|
|
68
70
|
await setIframeViewport(iframe, width, height);
|
|
69
71
|
await new Promise((resolve) => {
|
|
@@ -88,7 +90,7 @@ class IframeOrchestrator {
|
|
|
88
90
|
iframe.setAttribute("loading", "eager");
|
|
89
91
|
iframe.setAttribute(
|
|
90
92
|
"src",
|
|
91
|
-
`${url.pathname}__vitest_test__/__test__/${getBrowserState().
|
|
93
|
+
`${url.pathname}__vitest_test__/__test__/${getBrowserState().sessionId}/${encodeURIComponent(file)}`
|
|
92
94
|
);
|
|
93
95
|
iframe.setAttribute("data-vitest", "true");
|
|
94
96
|
iframe.style.border = "none";
|
|
@@ -192,7 +194,7 @@ getBrowserState().createTesters = async (files) => {
|
|
|
192
194
|
await promiseTesters;
|
|
193
195
|
};
|
|
194
196
|
async function done() {
|
|
195
|
-
await client.rpc.finishBrowserTests(getBrowserState().
|
|
197
|
+
await client.rpc.finishBrowserTests(getBrowserState().sessionId);
|
|
196
198
|
}
|
|
197
199
|
async function getContainer(config) {
|
|
198
200
|
if (config.browser.ui) {
|
|
@@ -210,7 +212,7 @@ async function getContainer(config) {
|
|
|
210
212
|
}
|
|
211
213
|
client.waitForConnection().then(async () => {
|
|
212
214
|
const testFiles = getBrowserState().files;
|
|
213
|
-
await orchestrator.init();
|
|
215
|
+
await orchestrator.init(testFiles);
|
|
214
216
|
if (testFiles.length) {
|
|
215
217
|
await orchestrator.createTesters(testFiles);
|
|
216
218
|
}
|
|
@@ -11702,7 +11702,7 @@ function mockObject(options, object, mockExports = {}) {
|
|
|
11702
11702
|
continue;
|
|
11703
11703
|
}
|
|
11704
11704
|
const isFunction2 = type.includes("Function") && typeof value === "function";
|
|
11705
|
-
if ((!isFunction2 || value.
|
|
11705
|
+
if ((!isFunction2 || value._isMockFunction) && type !== "Object" && type !== "Module") {
|
|
11706
11706
|
define(newContainer, property, value);
|
|
11707
11707
|
continue;
|
|
11708
11708
|
}
|
|
@@ -12140,9 +12140,9 @@ class ModuleMocker {
|
|
|
12140
12140
|
return path;
|
|
12141
12141
|
}
|
|
12142
12142
|
}
|
|
12143
|
-
const versionRegexp
|
|
12143
|
+
const versionRegexp = /(\?|&)v=\w{8}/;
|
|
12144
12144
|
function cleanVersion(url2) {
|
|
12145
|
-
return url2.replace(versionRegexp
|
|
12145
|
+
return url2.replace(versionRegexp, "");
|
|
12146
12146
|
}
|
|
12147
12147
|
const postfixRE = /[?#].*$/;
|
|
12148
12148
|
function cleanUrl(url2) {
|
|
@@ -12231,10 +12231,11 @@ ${keys7}`;
|
|
|
12231
12231
|
return await this.startPromise;
|
|
12232
12232
|
}
|
|
12233
12233
|
}
|
|
12234
|
-
const
|
|
12235
|
-
const
|
|
12234
|
+
const trailingSeparatorRE = /[?&]$/;
|
|
12235
|
+
const timestampRE = /\bt=\d{13}&?\b/;
|
|
12236
|
+
const versionRE = /\bv=\w{8}&?\b/;
|
|
12236
12237
|
function cleanQuery(url2) {
|
|
12237
|
-
return url2.replace(
|
|
12238
|
+
return url2.replace(timestampRE, "").replace(versionRE, "").replace(trailingSeparatorRE, "");
|
|
12238
12239
|
}
|
|
12239
12240
|
function passthrough() {
|
|
12240
12241
|
return new Response(null, {
|
|
@@ -13595,8 +13596,13 @@ function createBrowserRunner(runnerClass, mocker, state, coverageModule) {
|
|
|
13595
13596
|
});
|
|
13596
13597
|
__publicField(this, "onTaskFinished", async (task) => {
|
|
13597
13598
|
var _a;
|
|
13598
|
-
if (this.config.browser.screenshotFailures && ((_a = task.result) == null ? void 0 : _a.state) === "fail") {
|
|
13599
|
-
|
|
13599
|
+
if (this.config.browser.screenshotFailures && document.body.clientHeight > 0 && ((_a = task.result) == null ? void 0 : _a.state) === "fail") {
|
|
13600
|
+
const screenshot = await page.screenshot().catch((err) => {
|
|
13601
|
+
console.error("[vitest] Failed to take a screenshot", err);
|
|
13602
|
+
});
|
|
13603
|
+
if (screenshot) {
|
|
13604
|
+
task.meta.failScreenshotPath = screenshot;
|
|
13605
|
+
}
|
|
13600
13606
|
}
|
|
13601
13607
|
});
|
|
13602
13608
|
__publicField(this, "onCancel", (reason) => {
|
|
@@ -13636,6 +13642,9 @@ function createBrowserRunner(runnerClass, mocker, state, coverageModule) {
|
|
|
13636
13642
|
});
|
|
13637
13643
|
}
|
|
13638
13644
|
});
|
|
13645
|
+
__publicField(this, "onCollectStart", (file) => {
|
|
13646
|
+
return rpc$1().onQueued(file);
|
|
13647
|
+
});
|
|
13639
13648
|
__publicField(this, "onCollected", async (files) => {
|
|
13640
13649
|
files.forEach((file) => {
|
|
13641
13650
|
file.prepareDuration = state.durations.prepare;
|
|
@@ -13808,7 +13817,7 @@ async function executeTests(method, files) {
|
|
|
13808
13817
|
try {
|
|
13809
13818
|
await Promise.all([
|
|
13810
13819
|
setupCommonEnv(config),
|
|
13811
|
-
startCoverageInsideWorker(config.coverage, executor),
|
|
13820
|
+
startCoverageInsideWorker(config.coverage, executor, { isolate: config.browser.isolate }),
|
|
13812
13821
|
(async () => {
|
|
13813
13822
|
const VitestIndex = await __vitePreload(() => import("vitest"), true ? [] : void 0);
|
|
13814
13823
|
Object.defineProperty(window, "__vitest_index__", {
|
|
@@ -13839,7 +13848,7 @@ async function executeTests(method, files) {
|
|
|
13839
13848
|
}, "Cleanup Error");
|
|
13840
13849
|
}
|
|
13841
13850
|
state.environmentTeardownRun = true;
|
|
13842
|
-
await stopCoverageInsideWorker(config.coverage, executor).catch((error) => {
|
|
13851
|
+
await stopCoverageInsideWorker(config.coverage, executor, { isolate: config.browser.isolate }).catch((error) => {
|
|
13843
13852
|
client.rpc.onUnhandledError({
|
|
13844
13853
|
name: error.name,
|
|
13845
13854
|
message: error.message,
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
viteConfig: { __VITEST_VITE_CONFIG__ },
|
|
25
25
|
files: { __VITEST_FILES__ },
|
|
26
26
|
type: { __VITEST_TYPE__ },
|
|
27
|
-
|
|
27
|
+
sessionId: { __VITEST_SESSION_ID__ },
|
|
28
28
|
testerId: { __VITEST_TESTER_ID__ },
|
|
29
29
|
provider: { __VITEST_PROVIDER__ },
|
|
30
30
|
providedContext: { __VITEST_PROVIDED_CONTEXT__ },
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
{__VITEST_INJECTOR__}
|
|
27
27
|
{__VITEST_ERROR_CATCHER__}
|
|
28
28
|
{__VITEST_SCRIPTS__}
|
|
29
|
-
<script type="module" crossorigin src="/__vitest_browser__/orchestrator-
|
|
29
|
+
<script type="module" crossorigin src="/__vitest_browser__/orchestrator-vOivV83Y.js"></script>
|
|
30
30
|
<link rel="modulepreload" crossorigin href="/__vitest_browser__/utils-Owv5OOOf.js">
|
|
31
31
|
</head>
|
|
32
32
|
<body>
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<link rel="icon" href="{__VITEST_FAVICON__}" type="image/svg+xml">
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>Vitest Browser Tester</title>
|
|
8
|
-
<script type="module" crossorigin src="/__vitest_browser__/tester-
|
|
8
|
+
<script type="module" crossorigin src="/__vitest_browser__/tester-CDBn6hqf.js"></script>
|
|
9
9
|
<link rel="modulepreload" crossorigin href="/__vitest_browser__/utils-Owv5OOOf.js">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
package/dist/client.js
CHANGED
|
@@ -236,7 +236,7 @@ function getBrowserState() {
|
|
|
236
236
|
}
|
|
237
237
|
|
|
238
238
|
const channel = new BroadcastChannel(
|
|
239
|
-
`vitest:${getBrowserState().
|
|
239
|
+
`vitest:${getBrowserState().sessionId}`
|
|
240
240
|
);
|
|
241
241
|
const globalChannel = new BroadcastChannel("vitest:global");
|
|
242
242
|
function waitForChannel(event) {
|
|
@@ -256,8 +256,8 @@ function waitForChannel(event) {
|
|
|
256
256
|
const PAGE_TYPE = getBrowserState().type;
|
|
257
257
|
const PORT = location.port;
|
|
258
258
|
const HOST = [location.hostname, PORT].filter(Boolean).join(":");
|
|
259
|
-
const
|
|
260
|
-
const ENTRY_URL = `${location.protocol === "https:" ? "wss:" : "ws:"}//${HOST}/__vitest_browser_api__?type=${PAGE_TYPE}&sessionId=${
|
|
259
|
+
const RPC_ID = PAGE_TYPE === "orchestrator" ? getBrowserState().sessionId : getBrowserState().testerId;
|
|
260
|
+
const ENTRY_URL = `${location.protocol === "https:" ? "wss:" : "ws:"}//${HOST}/__vitest_browser_api__?type=${PAGE_TYPE}&rpcId=${RPC_ID}&sessionId=${getBrowserState().sessionId}&projectName=${getBrowserState().config.name || ""}`;
|
|
261
261
|
let setCancel = (_) => {
|
|
262
262
|
};
|
|
263
263
|
const onCancel = new Promise((resolve) => {
|
|
@@ -353,4 +353,4 @@ function createClient() {
|
|
|
353
353
|
}
|
|
354
354
|
const client = createClient();
|
|
355
355
|
|
|
356
|
-
export { ENTRY_URL, HOST, PORT,
|
|
356
|
+
export { ENTRY_URL, HOST, PORT, RPC_ID, channel, client, globalChannel, onCancel, waitForChannel };
|
package/dist/context.js
CHANGED
|
@@ -117,26 +117,24 @@ function filepath() {
|
|
|
117
117
|
return getWorkerState().filepath || getWorkerState().current?.file?.filepath || void 0;
|
|
118
118
|
}
|
|
119
119
|
const rpc = () => getWorkerState().rpc;
|
|
120
|
-
const
|
|
121
|
-
const channel = new BroadcastChannel(`vitest:${
|
|
120
|
+
const sessionId = getBrowserState().sessionId;
|
|
121
|
+
const channel = new BroadcastChannel(`vitest:${sessionId}`);
|
|
122
122
|
function triggerCommand(command, ...args) {
|
|
123
|
-
return rpc().triggerCommand(
|
|
123
|
+
return rpc().triggerCommand(sessionId, command, filepath(), args);
|
|
124
124
|
}
|
|
125
125
|
function createUserEvent(__tl_user_event_base__, options) {
|
|
126
|
-
|
|
126
|
+
if (__tl_user_event_base__) {
|
|
127
|
+
return createPreviewUserEvent(__tl_user_event_base__, options ?? {});
|
|
128
|
+
}
|
|
127
129
|
const keyboard = {
|
|
128
130
|
unreleased: []
|
|
129
131
|
};
|
|
130
132
|
return {
|
|
131
|
-
setup(
|
|
132
|
-
return createUserEvent(
|
|
133
|
+
setup() {
|
|
134
|
+
return createUserEvent();
|
|
133
135
|
},
|
|
134
136
|
async cleanup() {
|
|
135
137
|
return ensureAwaited(async () => {
|
|
136
|
-
if (typeof __tl_user_event_base__ !== "undefined") {
|
|
137
|
-
__tl_user_event__ = __tl_user_event_base__?.setup(options ?? {});
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
138
|
await triggerCommand("__vitest_cleanup", keyboard);
|
|
141
139
|
keyboard.unreleased = [];
|
|
142
140
|
});
|
|
@@ -177,13 +175,6 @@ function createUserEvent(__tl_user_event_base__, options) {
|
|
|
177
175
|
// testing-library user-event
|
|
178
176
|
async type(element, text, options2 = {}) {
|
|
179
177
|
return ensureAwaited(async () => {
|
|
180
|
-
if (typeof __tl_user_event__ !== "undefined") {
|
|
181
|
-
return __tl_user_event__.type(
|
|
182
|
-
element instanceof Element ? element : element.element(),
|
|
183
|
-
text,
|
|
184
|
-
options2
|
|
185
|
-
);
|
|
186
|
-
}
|
|
187
178
|
const selector = convertToSelector(element);
|
|
188
179
|
const { unreleased } = await triggerCommand(
|
|
189
180
|
"__vitest_type",
|
|
@@ -196,17 +187,11 @@ function createUserEvent(__tl_user_event_base__, options) {
|
|
|
196
187
|
},
|
|
197
188
|
tab(options2 = {}) {
|
|
198
189
|
return ensureAwaited(() => {
|
|
199
|
-
if (typeof __tl_user_event__ !== "undefined") {
|
|
200
|
-
return __tl_user_event__.tab(options2);
|
|
201
|
-
}
|
|
202
190
|
return triggerCommand("__vitest_tab", options2);
|
|
203
191
|
});
|
|
204
192
|
},
|
|
205
193
|
async keyboard(text) {
|
|
206
194
|
return ensureAwaited(async () => {
|
|
207
|
-
if (typeof __tl_user_event__ !== "undefined") {
|
|
208
|
-
return __tl_user_event__.keyboard(text);
|
|
209
|
-
}
|
|
210
195
|
const { unreleased } = await triggerCommand(
|
|
211
196
|
"__vitest_keyboard",
|
|
212
197
|
text,
|
|
@@ -217,6 +202,86 @@ function createUserEvent(__tl_user_event_base__, options) {
|
|
|
217
202
|
}
|
|
218
203
|
};
|
|
219
204
|
}
|
|
205
|
+
function createPreviewUserEvent(userEventBase, options) {
|
|
206
|
+
let userEvent = userEventBase.setup(options);
|
|
207
|
+
function toElement(element) {
|
|
208
|
+
return element instanceof Element ? element : element.element();
|
|
209
|
+
}
|
|
210
|
+
const vitestUserEvent = {
|
|
211
|
+
setup(options2) {
|
|
212
|
+
return createPreviewUserEvent(userEventBase, options2);
|
|
213
|
+
},
|
|
214
|
+
async cleanup() {
|
|
215
|
+
userEvent = userEventBase.setup(options ?? {});
|
|
216
|
+
},
|
|
217
|
+
async click(element) {
|
|
218
|
+
await userEvent.click(toElement(element));
|
|
219
|
+
},
|
|
220
|
+
async dblClick(element) {
|
|
221
|
+
await userEvent.dblClick(toElement(element));
|
|
222
|
+
},
|
|
223
|
+
async tripleClick(element) {
|
|
224
|
+
await userEvent.tripleClick(toElement(element));
|
|
225
|
+
},
|
|
226
|
+
async selectOptions(element, value) {
|
|
227
|
+
const options2 = (Array.isArray(value) ? value : [value]).map((option) => {
|
|
228
|
+
if (typeof option !== "string") {
|
|
229
|
+
return toElement(option);
|
|
230
|
+
}
|
|
231
|
+
return option;
|
|
232
|
+
});
|
|
233
|
+
await userEvent.selectOptions(
|
|
234
|
+
element,
|
|
235
|
+
options2
|
|
236
|
+
);
|
|
237
|
+
},
|
|
238
|
+
async clear(element) {
|
|
239
|
+
await userEvent.clear(toElement(element));
|
|
240
|
+
},
|
|
241
|
+
async hover(element) {
|
|
242
|
+
await userEvent.hover(toElement(element));
|
|
243
|
+
},
|
|
244
|
+
async unhover(element) {
|
|
245
|
+
await userEvent.unhover(toElement(element));
|
|
246
|
+
},
|
|
247
|
+
async upload(element, files) {
|
|
248
|
+
const uploadPromise = (Array.isArray(files) ? files : [files]).map(async (file) => {
|
|
249
|
+
if (typeof file !== "string") {
|
|
250
|
+
return file;
|
|
251
|
+
}
|
|
252
|
+
const { content: base64, basename, mime } = await triggerCommand("__vitest_fileInfo", file, "base64");
|
|
253
|
+
const fileInstance = fetch(`data:${mime};base64,${base64}`).then((r) => r.blob()).then((blob) => new File([blob], basename, { type: mime }));
|
|
254
|
+
return fileInstance;
|
|
255
|
+
});
|
|
256
|
+
const uploadFiles = await Promise.all(uploadPromise);
|
|
257
|
+
return userEvent.upload(toElement(element), uploadFiles);
|
|
258
|
+
},
|
|
259
|
+
async fill(element, text) {
|
|
260
|
+
await userEvent.clear(toElement(element));
|
|
261
|
+
return userEvent.type(toElement(element), text);
|
|
262
|
+
},
|
|
263
|
+
async dragAndDrop() {
|
|
264
|
+
throw new Error(`The "preview" provider doesn't support 'userEvent.dragAndDrop'`);
|
|
265
|
+
},
|
|
266
|
+
async type(element, text, options2 = {}) {
|
|
267
|
+
await userEvent.type(toElement(element), text, options2);
|
|
268
|
+
},
|
|
269
|
+
async tab(options2 = {}) {
|
|
270
|
+
await userEvent.tab(options2);
|
|
271
|
+
},
|
|
272
|
+
async keyboard(text) {
|
|
273
|
+
await userEvent.keyboard(text);
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
for (const [name, fn] of Object.entries(vitestUserEvent)) {
|
|
277
|
+
if (name !== "setup") {
|
|
278
|
+
vitestUserEvent[name] = function(...args) {
|
|
279
|
+
return ensureAwaited(() => fn.apply(this, args));
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return vitestUserEvent;
|
|
284
|
+
}
|
|
220
285
|
function cdp() {
|
|
221
286
|
return getBrowserState().cdp;
|
|
222
287
|
}
|
|
@@ -235,6 +235,12 @@ class Locator {
|
|
|
235
235
|
all() {
|
|
236
236
|
return this.elements().map((element) => this.elementLocator(element));
|
|
237
237
|
}
|
|
238
|
+
toString() {
|
|
239
|
+
return this.selector;
|
|
240
|
+
}
|
|
241
|
+
toJSON() {
|
|
242
|
+
return this.selector;
|
|
243
|
+
}
|
|
238
244
|
get state() {
|
|
239
245
|
return getBrowserState();
|
|
240
246
|
}
|
|
@@ -247,7 +253,7 @@ class Locator {
|
|
|
247
253
|
triggerCommand(command, ...args) {
|
|
248
254
|
const filepath = this.worker.filepath || this.worker.current?.file?.filepath || void 0;
|
|
249
255
|
return ensureAwaited(() => this.rpc.triggerCommand(
|
|
250
|
-
this.state.
|
|
256
|
+
this.state.sessionId,
|
|
251
257
|
command,
|
|
252
258
|
filepath,
|
|
253
259
|
args
|
|
@@ -255,4 +261,4 @@ class Locator {
|
|
|
255
261
|
}
|
|
256
262
|
}
|
|
257
263
|
|
|
258
|
-
export { Locator as L, convertElementToCssSelector as c,
|
|
264
|
+
export { Locator as L, convertElementToCssSelector as c, selectorEngine as s };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Plugin } from 'vitest/config';
|
|
2
|
-
import { CDPSession, BrowserServerState as BrowserServerState$1,
|
|
3
|
-
import * as
|
|
4
|
-
import { RunnerTestFile, TaskResultPack, AfterSuiteRunMeta, CancelReason, UserConsoleLog, SnapshotResult, SerializedConfig, ErrorWithDiff } from 'vitest';
|
|
2
|
+
import { CDPSession, BrowserServerState as BrowserServerState$1, ProjectBrowser as ProjectBrowser$1, TestProject, BrowserProvider, Vitest, ResolvedConfig, Vite, BrowserCommand, BrowserScript, ProcessPool } from 'vitest/node';
|
|
3
|
+
import * as vite from 'vite';
|
|
5
4
|
import { HtmlTagDescriptor } from 'vite';
|
|
5
|
+
import * as vitest from 'vitest';
|
|
6
|
+
import { RunnerTestFile, TaskResultPack, AfterSuiteRunMeta, CancelReason, UserConsoleLog, SnapshotResult, SerializedConfig, ErrorWithDiff, ParsedStack } from 'vitest';
|
|
6
7
|
import { StackTraceParserOptions } from '@vitest/utils/source-map';
|
|
7
8
|
import { ServerIdResolution, ServerMockResolution } from '@vitest/mocker/node';
|
|
8
9
|
|
|
@@ -26,6 +27,7 @@ interface WebSocketBrowserHandlers {
|
|
|
26
27
|
resolveSnapshotPath: (testPath: string) => string;
|
|
27
28
|
resolveSnapshotRawPath: (testPath: string, rawPath: string) => string;
|
|
28
29
|
onUnhandledError: (error: unknown, type: string) => Promise<void>;
|
|
30
|
+
onQueued: (file: RunnerTestFile) => void;
|
|
29
31
|
onCollected: (files?: RunnerTestFile[]) => Promise<void>;
|
|
30
32
|
onTaskUpdate: (packs: TaskResultPack[]) => void;
|
|
31
33
|
onAfterSuiteRun: (meta: AfterSuiteRunMeta) => void;
|
|
@@ -35,11 +37,11 @@ interface WebSocketBrowserHandlers {
|
|
|
35
37
|
saveSnapshotFile: (id: string, content: string) => Promise<void>;
|
|
36
38
|
removeSnapshotFile: (id: string) => Promise<void>;
|
|
37
39
|
sendLog: (log: UserConsoleLog) => void;
|
|
38
|
-
finishBrowserTests: (
|
|
40
|
+
finishBrowserTests: (sessionId: string) => void;
|
|
39
41
|
snapshotSaved: (snapshot: SnapshotResult) => void;
|
|
40
42
|
debug: (...args: string[]) => void;
|
|
41
43
|
resolveId: (id: string, importer?: string) => Promise<ServerIdResolution | null>;
|
|
42
|
-
triggerCommand: <T>(
|
|
44
|
+
triggerCommand: <T>(sessionId: string, command: string, testPath: string | undefined, payload: unknown[]) => Promise<T>;
|
|
43
45
|
resolveMock: (id: string, importer: string, options: {
|
|
44
46
|
mock: 'spy' | 'factory' | 'auto';
|
|
45
47
|
}) => Promise<ServerMockResolution>;
|
|
@@ -47,8 +49,8 @@ interface WebSocketBrowserHandlers {
|
|
|
47
49
|
getBrowserFileSourceMap: (id: string) => SourceMap | null | {
|
|
48
50
|
mappings: '';
|
|
49
51
|
} | undefined;
|
|
50
|
-
sendCdpEvent: (
|
|
51
|
-
trackCdpEvent: (
|
|
52
|
+
sendCdpEvent: (sessionId: string, event: string, payload?: Record<string, unknown>) => unknown;
|
|
53
|
+
trackCdpEvent: (sessionId: string, type: 'on' | 'once' | 'off', event: string, listenerId: string) => void;
|
|
52
54
|
}
|
|
53
55
|
interface WebSocketBrowserEvents {
|
|
54
56
|
onCancel: (reason: CancelReason) => void;
|
|
@@ -82,52 +84,68 @@ declare class BrowserServerCDPHandler {
|
|
|
82
84
|
declare class BrowserServerState implements BrowserServerState$1 {
|
|
83
85
|
readonly orchestrators: Map<string, WebSocketBrowserRPC>;
|
|
84
86
|
readonly testers: Map<string, WebSocketBrowserRPC>;
|
|
85
|
-
readonly cdps: Map<string, BrowserServerCDPHandler>;
|
|
86
|
-
private contexts;
|
|
87
|
-
getContext(contextId: string): BrowserServerStateContext | undefined;
|
|
88
|
-
createAsyncContext(method: 'run' | 'collect', contextId: string, files: string[]): Promise<void>;
|
|
89
|
-
removeCDPHandler(sessionId: string): Promise<void>;
|
|
90
87
|
}
|
|
91
88
|
|
|
92
|
-
declare class
|
|
89
|
+
declare class ProjectBrowser implements ProjectBrowser$1 {
|
|
90
|
+
project: TestProject;
|
|
91
|
+
base: string;
|
|
92
|
+
testerHtml: Promise<string> | string;
|
|
93
|
+
testerFilepath: string;
|
|
94
|
+
locatorsUrl: string | undefined;
|
|
95
|
+
provider: BrowserProvider;
|
|
96
|
+
vitest: Vitest;
|
|
97
|
+
config: ResolvedConfig;
|
|
98
|
+
children: Set<ProjectBrowser>;
|
|
99
|
+
parent: ParentBrowserProject;
|
|
100
|
+
state: BrowserServerState;
|
|
101
|
+
constructor(project: TestProject, base: string);
|
|
102
|
+
get vite(): vite.ViteDevServer;
|
|
103
|
+
wrapSerializedConfig(): SerializedConfig;
|
|
104
|
+
initBrowserProvider(project: TestProject): Promise<void>;
|
|
105
|
+
parseErrorStacktrace(e: ErrorWithDiff, options?: StackTraceParserOptions): vitest.ParsedStack[];
|
|
106
|
+
parseStacktrace(trace: string, options?: StackTraceParserOptions): vitest.ParsedStack[];
|
|
107
|
+
close(): Promise<void>;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
declare class ParentBrowserProject {
|
|
93
111
|
project: TestProject;
|
|
94
112
|
base: string;
|
|
95
|
-
faviconUrl: string;
|
|
96
|
-
prefixTesterUrl: string;
|
|
97
113
|
orchestratorScripts: string | undefined;
|
|
98
114
|
testerScripts: HtmlTagDescriptor[] | undefined;
|
|
115
|
+
faviconUrl: string;
|
|
116
|
+
prefixTesterUrl: string;
|
|
99
117
|
manifest: Promise<Vite.Manifest> | Vite.Manifest;
|
|
100
|
-
|
|
101
|
-
|
|
118
|
+
vite: Vite.ViteDevServer;
|
|
119
|
+
private stackTraceOptions;
|
|
102
120
|
orchestratorHtml: Promise<string> | string;
|
|
103
121
|
injectorJs: Promise<string> | string;
|
|
104
122
|
errorCatcherUrl: string;
|
|
105
123
|
locatorsUrl: string | undefined;
|
|
106
124
|
stateJs: Promise<string> | string;
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
125
|
+
commands: Record<string, BrowserCommand<any>>;
|
|
126
|
+
children: Set<ProjectBrowser>;
|
|
127
|
+
vitest: Vitest;
|
|
128
|
+
config: ResolvedConfig;
|
|
111
129
|
constructor(project: TestProject, base: string);
|
|
112
|
-
setServer(
|
|
113
|
-
|
|
130
|
+
setServer(vite: Vite.ViteDevServer): void;
|
|
131
|
+
spawn(project: TestProject): ProjectBrowser;
|
|
132
|
+
parseErrorStacktrace(e: ErrorWithDiff, options?: StackTraceParserOptions): ParsedStack[];
|
|
133
|
+
parseStacktrace(trace: string, options?: StackTraceParserOptions): ParsedStack[];
|
|
134
|
+
readonly cdps: Map<string, BrowserServerCDPHandler>;
|
|
135
|
+
private cdpSessionsPromises;
|
|
136
|
+
ensureCDPHandler(sessionId: string, rpcId: string): Promise<BrowserServerCDPHandler>;
|
|
137
|
+
removeCDPHandler(sessionId: string): void;
|
|
138
|
+
formatScripts(scripts: BrowserScript[] | undefined): Promise<HtmlTagDescriptor[]>;
|
|
114
139
|
resolveTesterUrl(pathname: string): {
|
|
115
|
-
|
|
140
|
+
sessionId: string;
|
|
116
141
|
testFile: string;
|
|
117
142
|
};
|
|
118
|
-
formatScripts(scripts: BrowserScript[] | undefined): Promise<HtmlTagDescriptor[]>;
|
|
119
|
-
initBrowserProvider(): Promise<void>;
|
|
120
|
-
parseErrorStacktrace(e: ErrorWithDiff, options?: StackTraceParserOptions): vitest.ParsedStack[];
|
|
121
|
-
parseStacktrace(trace: string, options?: StackTraceParserOptions): vitest.ParsedStack[];
|
|
122
|
-
private cdpSessionsPromises;
|
|
123
|
-
ensureCDPHandler(contextId: string, sessionId: string): Promise<BrowserServerCDPHandler>;
|
|
124
|
-
close(): Promise<void>;
|
|
125
143
|
}
|
|
126
144
|
|
|
127
145
|
declare const distRoot: string;
|
|
128
146
|
|
|
129
|
-
declare function createBrowserPool(
|
|
147
|
+
declare function createBrowserPool(vitest: Vitest): ProcessPool;
|
|
130
148
|
|
|
131
|
-
declare function createBrowserServer(project: TestProject, configFile: string | undefined, prePlugins?: Plugin[], postPlugins?: Plugin[]): Promise<
|
|
149
|
+
declare function createBrowserServer(project: TestProject, configFile: string | undefined, prePlugins?: Plugin[], postPlugins?: Plugin[]): Promise<ParentBrowserProject>;
|
|
132
150
|
|
|
133
|
-
export {
|
|
151
|
+
export { ProjectBrowser, createBrowserPool, createBrowserServer, distRoot };
|