@vitest/browser 3.0.0-beta.2 → 3.0.0-beta.4
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 +36 -0
- package/dist/client/.vite/manifest.json +6 -6
- package/dist/client/__vitest__/assets/index-BC8TFRpg.js +52 -0
- package/dist/client/__vitest__/index.html +1 -1
- package/dist/client/__vitest_browser__/{orchestrator-DnP17K36.js → orchestrator-Cv-bzUFk.js} +8 -6
- package/dist/client/__vitest_browser__/{tester-BdwA4c5U.js → tester-DreAh6ar.js} +84 -61
- package/dist/client/__vitest_browser__/{utils-Owv5OOOf.js → utils-CaCTRFti.js} +2 -0
- package/dist/client/esm-client-injector.js +1 -1
- package/dist/client/orchestrator.html +2 -2
- package/dist/client/tester/tester.html +2 -2
- package/dist/client.js +6 -6
- package/dist/context.js +25 -4
- package/dist/{index-CMAn5ZST.js → index-Dos_sf7B.js} +10 -1
- package/dist/index.d.ts +52 -34
- package/dist/index.js +2437 -1970
- package/dist/locators/index.d.ts +3 -0
- package/dist/locators/index.js +1 -1
- package/dist/locators/playwright.js +1 -1
- package/dist/locators/preview.js +1 -1
- 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/jest-dom.d.ts +4 -4
- package/package.json +15 -15
- package/providers/playwright.d.ts +2 -1
- package/providers/webdriverio.d.ts +2 -1
- package/dist/client/__vitest__/assets/index-BgsOOCCp.js +0 -52
package/dist/locators/index.d.ts
CHANGED
|
@@ -253,6 +253,9 @@ declare abstract class Locator {
|
|
|
253
253
|
element(): Element;
|
|
254
254
|
elements(): Element[];
|
|
255
255
|
all(): Locator[];
|
|
256
|
+
nth(index: number): Locator;
|
|
257
|
+
first(): Locator;
|
|
258
|
+
last(): Locator;
|
|
256
259
|
toString(): string;
|
|
257
260
|
toJSON(): string;
|
|
258
261
|
private get state();
|
package/dist/locators/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { page, server } from '@vitest/browser/context';
|
|
2
2
|
import { g as getByLabelSelector, a as getByRoleSelector, b as getByTestIdSelector, c as getByAltTextSelector, d as getByPlaceholderSelector, e as getByTextSelector, f as getByTitleSelector } from '../public-utils-D6S2-5kI.js';
|
|
3
|
-
import { s as selectorEngine, L as Locator } from '../index-
|
|
3
|
+
import { s as selectorEngine, L as Locator } from '../index-Dos_sf7B.js';
|
|
4
4
|
import 'vitest/utils';
|
|
5
5
|
|
|
6
6
|
page.extend({
|
package/dist/locators/preview.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { page, server, userEvent } from '@vitest/browser/context';
|
|
2
2
|
import { g as getByLabelSelector, a as getByRoleSelector, b as getByTestIdSelector, c as getByAltTextSelector, d as getByPlaceholderSelector, e as getByTextSelector, f as getByTitleSelector, h as getElementError } from '../public-utils-D6S2-5kI.js';
|
|
3
|
-
import { s as selectorEngine, L as Locator, c as convertElementToCssSelector } from '../index-
|
|
3
|
+
import { s as selectorEngine, L as Locator, c as convertElementToCssSelector } from '../index-Dos_sf7B.js';
|
|
4
4
|
import 'vitest/utils';
|
|
5
5
|
|
|
6
6
|
page.extend({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { page, server } from '@vitest/browser/context';
|
|
2
2
|
import { g as getByLabelSelector, a as getByRoleSelector, b as getByTestIdSelector, c as getByAltTextSelector, d as getByPlaceholderSelector, e as getByTextSelector, f as getByTitleSelector, h as getElementError } from '../public-utils-D6S2-5kI.js';
|
|
3
|
-
import { s as selectorEngine, L as Locator, c as convertElementToCssSelector } from '../index-
|
|
3
|
+
import { s as selectorEngine, L as Locator, c as convertElementToCssSelector } from '../index-Dos_sf7B.js';
|
|
4
4
|
import 'vitest/utils';
|
|
5
5
|
|
|
6
6
|
page.extend({
|
package/dist/providers.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { W as WebdriverBrowserProvider, P as PlaywrightBrowserProvider } from './webdriver-
|
|
1
|
+
import { W as WebdriverBrowserProvider, P as PlaywrightBrowserProvider } from './webdriver-dkCg9pjp.js';
|
|
2
2
|
|
|
3
3
|
class PreviewBrowserProvider {
|
|
4
4
|
name = "preview";
|
|
@@ -22,9 +22,9 @@ class PreviewBrowserProvider {
|
|
|
22
22
|
`You've enabled headless mode for "preview" provider but it doesn't support it. Use "playwright" or "webdriverio" instead: https://vitest.dev/guide/browser/#configuration`
|
|
23
23
|
);
|
|
24
24
|
}
|
|
25
|
-
project.
|
|
25
|
+
project.vitest.logger.printBrowserBanner(project);
|
|
26
26
|
}
|
|
27
|
-
async openPage(
|
|
27
|
+
async openPage(_sessionId, url) {
|
|
28
28
|
this.open = true;
|
|
29
29
|
if (!this.project.browser) {
|
|
30
30
|
throw new Error("Browser is not initialized");
|
package/dist/state.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(){"use strict";const{parse:$parse,stringify:$stringify}=JSON;const{keys}=Object;const Primitive=String;const primitive="string";const ignore={};const object="object";const noop=(_,value)=>value;const primitives=value=>value instanceof Primitive?Primitive(value):value;const Primitives=(_,value)=>typeof value===primitive?new Primitive(value):value;const revive=(input,parsed,output,$)=>{const lazy=[];for(let ke=keys(output),{length}=ke,y=0;y<length;y++){const k=ke[y];const value=output[k];if(value instanceof Primitive){const tmp=input[value];if(typeof tmp===object&&!parsed.has(tmp)){parsed.add(tmp);output[k]=ignore;lazy.push({k,a:[input,parsed,tmp,$]})}else output[k]=$.call(output,k,tmp)}else if(output[k]!==ignore)output[k]=$.call(output,k,value)}for(let{length}=lazy,i=0;i<length;i++){const{k,a}=lazy[i];output[k]=$.call(output,k,revive.apply(null,a))}return output};const parse=(text,reviver)=>{const input=$parse(text,Primitives).map(primitives);const value=input[0];const $=noop;const tmp=typeof value===object&&value?revive(input,new Set,value,$):value;return $.call({"":tmp},"",tmp)};function getBrowserState(){return window.__vitest_browser_runner__}const config=getBrowserState().config;const
|
|
1
|
+
(function(){"use strict";const{parse:$parse,stringify:$stringify}=JSON;const{keys}=Object;const Primitive=String;const primitive="string";const ignore={};const object="object";const noop=(_,value)=>value;const primitives=value=>value instanceof Primitive?Primitive(value):value;const Primitives=(_,value)=>typeof value===primitive?new Primitive(value):value;const revive=(input,parsed,output,$)=>{const lazy=[];for(let ke=keys(output),{length}=ke,y=0;y<length;y++){const k=ke[y];const value=output[k];if(value instanceof Primitive){const tmp=input[value];if(typeof tmp===object&&!parsed.has(tmp)){parsed.add(tmp);output[k]=ignore;lazy.push({k,a:[input,parsed,tmp,$]})}else output[k]=$.call(output,k,tmp)}else if(output[k]!==ignore)output[k]=$.call(output,k,value)}for(let{length}=lazy,i=0;i<length;i++){const{k,a}=lazy[i];output[k]=$.call(output,k,revive.apply(null,a))}return output};const parse=(text,reviver)=>{const input=$parse(text,Primitives).map(primitives);const value=input[0];const $=noop;const tmp=typeof value===object&&value?revive(input,new Set,value,$):value;return $.call({"":tmp},"",tmp)};function getBrowserState(){return window.__vitest_browser_runner__}const config=getBrowserState().config;const sessionId=getBrowserState().sessionId;const providedContext=parse(getBrowserState().providedContext);const state={ctx:{pool:"browser",worker:"./browser.js",workerId:1,config,projectName:config.name||"",files:[],environment:{name:"browser",options:null},providedContext,invalidates:[]},onCancel:null,config,environment:{name:"browser",transformMode:"web",setup(){throw new Error("Not called in the browser")}},moduleCache:getBrowserState().moduleCache,rpc:null,durations:{environment:0,prepare:performance.now()},providedContext};globalThis.__vitest_browser__=true;globalThis.__vitest_worker__=state;getBrowserState().cdp=createCdp();function rpc(){return state.rpc}function createCdp(){const listenersMap=new WeakMap;function getId(listener){const id=listenersMap.get(listener)||crypto.randomUUID();listenersMap.set(listener,id);return id}const listeners={};const cdp={send(method,params){return rpc().sendCdpEvent(sessionId,method,params)},on(event,listener){const listenerId=getId(listener);listeners[event]=listeners[event]||[];listeners[event].push(listener);rpc().trackCdpEvent(sessionId,"on",event,listenerId).catch(error);return cdp},once(event,listener){const listenerId=getId(listener);const handler=data=>{listener(data);cdp.off(event,listener)};listeners[event]=listeners[event]||[];listeners[event].push(handler);rpc().trackCdpEvent(sessionId,"once",event,listenerId).catch(error);return cdp},off(event,listener){const listenerId=getId(listener);if(listeners[event]){listeners[event]=listeners[event].filter(l=>l!==listener)}rpc().trackCdpEvent(sessionId,"off",event,listenerId).catch(error);return cdp},emit(event,payload){if(listeners[event]){listeners[event].forEach(l=>{try{l(payload)}catch(err){error(err)}})}}};return cdp}function error(err){window.dispatchEvent(new ErrorEvent("error",{error:err}))}})();
|
|
@@ -37,7 +37,7 @@ class PlaywrightBrowserProvider {
|
|
|
37
37
|
launchOptions.args ||= [];
|
|
38
38
|
launchOptions.args.push(`--remote-debugging-port=${port}`);
|
|
39
39
|
launchOptions.args.push(`--remote-debugging-address=${host}`);
|
|
40
|
-
this.project.logger.log(`Debugger listening on ws://${host}:${port}`);
|
|
40
|
+
this.project.vitest.logger.log(`Debugger listening on ws://${host}:${port}`);
|
|
41
41
|
}
|
|
42
42
|
if (this.project.config.browser.ui && this.browserName === "chromium") {
|
|
43
43
|
if (!launchOptions.args) {
|
|
@@ -54,9 +54,9 @@ class PlaywrightBrowserProvider {
|
|
|
54
54
|
})();
|
|
55
55
|
return this.browserPromise;
|
|
56
56
|
}
|
|
57
|
-
async createContext(
|
|
58
|
-
if (this.contexts.has(
|
|
59
|
-
return this.contexts.get(
|
|
57
|
+
async createContext(sessionId) {
|
|
58
|
+
if (this.contexts.has(sessionId)) {
|
|
59
|
+
return this.contexts.get(sessionId);
|
|
60
60
|
}
|
|
61
61
|
const browser = await this.openBrowser();
|
|
62
62
|
const { actionTimeout, ...contextOptions } = this.options?.context ?? {};
|
|
@@ -72,21 +72,21 @@ class PlaywrightBrowserProvider {
|
|
|
72
72
|
if (actionTimeout) {
|
|
73
73
|
context.setDefaultTimeout(actionTimeout);
|
|
74
74
|
}
|
|
75
|
-
this.contexts.set(
|
|
75
|
+
this.contexts.set(sessionId, context);
|
|
76
76
|
return context;
|
|
77
77
|
}
|
|
78
|
-
getPage(
|
|
79
|
-
const page = this.pages.get(
|
|
78
|
+
getPage(sessionId) {
|
|
79
|
+
const page = this.pages.get(sessionId);
|
|
80
80
|
if (!page) {
|
|
81
|
-
throw new Error(`Page "${
|
|
81
|
+
throw new Error(`Page "${sessionId}" not found in ${this.browserName} browser.`);
|
|
82
82
|
}
|
|
83
83
|
return page;
|
|
84
84
|
}
|
|
85
|
-
getCommandsContext(
|
|
86
|
-
const page = this.getPage(
|
|
85
|
+
getCommandsContext(sessionId) {
|
|
86
|
+
const page = this.getPage(sessionId);
|
|
87
87
|
return {
|
|
88
88
|
page,
|
|
89
|
-
context: this.contexts.get(
|
|
89
|
+
context: this.contexts.get(sessionId),
|
|
90
90
|
frame() {
|
|
91
91
|
return new Promise((resolve, reject) => {
|
|
92
92
|
const frame = page.frame("vitest-iframe");
|
|
@@ -108,15 +108,15 @@ class PlaywrightBrowserProvider {
|
|
|
108
108
|
}
|
|
109
109
|
};
|
|
110
110
|
}
|
|
111
|
-
async openBrowserPage(
|
|
112
|
-
if (this.pages.has(
|
|
113
|
-
const page2 = this.pages.get(
|
|
111
|
+
async openBrowserPage(sessionId) {
|
|
112
|
+
if (this.pages.has(sessionId)) {
|
|
113
|
+
const page2 = this.pages.get(sessionId);
|
|
114
114
|
await page2.close();
|
|
115
|
-
this.pages.delete(
|
|
115
|
+
this.pages.delete(sessionId);
|
|
116
116
|
}
|
|
117
|
-
const context = await this.createContext(
|
|
117
|
+
const context = await this.createContext(sessionId);
|
|
118
118
|
const page = await context.newPage();
|
|
119
|
-
this.pages.set(
|
|
119
|
+
this.pages.set(sessionId, page);
|
|
120
120
|
if (process.env.VITEST_PW_DEBUG) {
|
|
121
121
|
page.on("requestfailed", (request) => {
|
|
122
122
|
console.error(
|
|
@@ -131,13 +131,13 @@ class PlaywrightBrowserProvider {
|
|
|
131
131
|
}
|
|
132
132
|
return page;
|
|
133
133
|
}
|
|
134
|
-
async openPage(
|
|
135
|
-
const browserPage = await this.openBrowserPage(
|
|
134
|
+
async openPage(sessionId, url, beforeNavigate) {
|
|
135
|
+
const browserPage = await this.openBrowserPage(sessionId);
|
|
136
136
|
await beforeNavigate?.();
|
|
137
137
|
await browserPage.goto(url, { timeout: 0 });
|
|
138
138
|
}
|
|
139
|
-
async getCDPSession(
|
|
140
|
-
const page = this.getPage(
|
|
139
|
+
async getCDPSession(sessionid) {
|
|
140
|
+
const page = this.getPage(sessionid);
|
|
141
141
|
const cdp = await page.context().newCDPSession(page);
|
|
142
142
|
return {
|
|
143
143
|
async send(method, params) {
|
|
@@ -247,7 +247,7 @@ class WebdriverBrowserProvider {
|
|
|
247
247
|
}
|
|
248
248
|
return capabilities;
|
|
249
249
|
}
|
|
250
|
-
async openPage(
|
|
250
|
+
async openPage(_sessionId, url) {
|
|
251
251
|
const browserInstance = await this.openBrowser();
|
|
252
252
|
await browserInstance.url(url);
|
|
253
253
|
}
|
package/jest-dom.d.ts
CHANGED
|
@@ -192,10 +192,10 @@ declare namespace matchers {
|
|
|
192
192
|
*
|
|
193
193
|
* const ancestor = getByTestId('ancestor')
|
|
194
194
|
* const descendant = getByTestId('descendant')
|
|
195
|
-
* const
|
|
195
|
+
* const nonExistentElement = getByTestId('does-not-exist')
|
|
196
196
|
* expect(ancestor).toContainElement(descendant)
|
|
197
197
|
* expect(descendant).not.toContainElement(ancestor)
|
|
198
|
-
* expect(ancestor).not.toContainElement(
|
|
198
|
+
* expect(ancestor).not.toContainElement(nonExistentElement)
|
|
199
199
|
* @see
|
|
200
200
|
* [testing-library/jest-dom#tocontainelement](https://github.com/testing-library/jest-dom#tocontainelement)
|
|
201
201
|
*/
|
|
@@ -282,7 +282,7 @@ declare namespace matchers {
|
|
|
282
282
|
* <option value="avocado">Avocado</option>
|
|
283
283
|
* </select>
|
|
284
284
|
*
|
|
285
|
-
* <label for="
|
|
285
|
+
* <label for="multiple-select-example">Fruits</label>
|
|
286
286
|
* <select id="multiple-select-example" multiple>
|
|
287
287
|
* <option value="">Select a fruit...</option>
|
|
288
288
|
* <option value="banana" selected>Banana</option>
|
|
@@ -382,7 +382,7 @@ declare namespace matchers {
|
|
|
382
382
|
* expect(element).toHaveTextContent('Content')
|
|
383
383
|
* // to match the whole content
|
|
384
384
|
* expect(element).toHaveTextContent(/^Text Content$/)
|
|
385
|
-
* // to use case-
|
|
385
|
+
* // to use case-insensitive match
|
|
386
386
|
* expect(element).toHaveTextContent(/content$/i)
|
|
387
387
|
* expect(element).not.toHaveTextContent('content')
|
|
388
388
|
* @see
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vitest/browser",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "3.0.0-beta.
|
|
4
|
+
"version": "3.0.0-beta.4",
|
|
5
5
|
"description": "Browser running for Vitest",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"funding": "https://opencollective.com/vitest",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"peerDependencies": {
|
|
66
66
|
"playwright": "*",
|
|
67
67
|
"webdriverio": "*",
|
|
68
|
-
"vitest": "3.0.0-beta.
|
|
68
|
+
"vitest": "3.0.0-beta.4"
|
|
69
69
|
},
|
|
70
70
|
"peerDependenciesMeta": {
|
|
71
71
|
"playwright": {
|
|
@@ -81,13 +81,13 @@
|
|
|
81
81
|
"dependencies": {
|
|
82
82
|
"@testing-library/dom": "^10.4.0",
|
|
83
83
|
"@testing-library/user-event": "^14.5.2",
|
|
84
|
-
"magic-string": "^0.30.
|
|
85
|
-
"msw": "^2.
|
|
84
|
+
"magic-string": "^0.30.17",
|
|
85
|
+
"msw": "^2.7.0",
|
|
86
86
|
"sirv": "^3.0.0",
|
|
87
87
|
"tinyrainbow": "^1.2.0",
|
|
88
88
|
"ws": "^8.18.0",
|
|
89
|
-
"@vitest/mocker": "3.0.0-beta.
|
|
90
|
-
"@vitest/utils": "3.0.0-beta.
|
|
89
|
+
"@vitest/mocker": "3.0.0-beta.4",
|
|
90
|
+
"@vitest/utils": "3.0.0-beta.4"
|
|
91
91
|
},
|
|
92
92
|
"devDependencies": {
|
|
93
93
|
"@testing-library/jest-dom": "^6.6.3",
|
|
@@ -96,17 +96,17 @@
|
|
|
96
96
|
"birpc": "0.2.19",
|
|
97
97
|
"flatted": "^3.3.2",
|
|
98
98
|
"ivya": "^1.1.1",
|
|
99
|
-
"mime": "^4.0.
|
|
100
|
-
"pathe": "^
|
|
99
|
+
"mime": "^4.0.6",
|
|
100
|
+
"pathe": "^2.0.0",
|
|
101
101
|
"periscopic": "^4.0.2",
|
|
102
|
-
"playwright": "^1.49.
|
|
103
|
-
"playwright-core": "^1.49.
|
|
102
|
+
"playwright": "^1.49.1",
|
|
103
|
+
"playwright-core": "^1.49.1",
|
|
104
104
|
"safaridriver": "^1.0.0",
|
|
105
|
-
"webdriverio": "^8.
|
|
106
|
-
"@vitest/
|
|
107
|
-
"@vitest/
|
|
108
|
-
"@vitest/
|
|
109
|
-
"vitest": "3.0.0-beta.
|
|
105
|
+
"webdriverio": "^8.41.0",
|
|
106
|
+
"@vitest/runner": "3.0.0-beta.4",
|
|
107
|
+
"@vitest/ui": "3.0.0-beta.4",
|
|
108
|
+
"@vitest/ws-client": "3.0.0-beta.4",
|
|
109
|
+
"vitest": "3.0.0-beta.4"
|
|
110
110
|
},
|
|
111
111
|
"scripts": {
|
|
112
112
|
"build": "rimraf dist && pnpm build:node && pnpm build:client",
|
|
@@ -9,9 +9,10 @@ import type {
|
|
|
9
9
|
} from 'playwright'
|
|
10
10
|
import { Protocol } from 'playwright-core/types/protocol'
|
|
11
11
|
import '../matchers.js'
|
|
12
|
+
import type {} from "vitest/node"
|
|
12
13
|
|
|
13
14
|
declare module 'vitest/node' {
|
|
14
|
-
interface BrowserProviderOptions {
|
|
15
|
+
export interface BrowserProviderOptions {
|
|
15
16
|
launch?: LaunchOptions
|
|
16
17
|
context?: Omit<
|
|
17
18
|
BrowserContextOptions,
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { RemoteOptions, ClickOptions, DragAndDropOptions } from 'webdriverio'
|
|
2
2
|
import '../matchers.js'
|
|
3
|
+
import type {} from "vitest/node"
|
|
3
4
|
|
|
4
5
|
declare module 'vitest/node' {
|
|
5
|
-
interface BrowserProviderOptions extends RemoteOptions {}
|
|
6
|
+
export interface BrowserProviderOptions extends Partial<RemoteOptions> {}
|
|
6
7
|
|
|
7
8
|
export interface UserEventClickOptions extends ClickOptions {}
|
|
8
9
|
|