@vitest/browser 2.2.0-beta.2 → 3.0.0-beta.1

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.
@@ -23,8 +23,8 @@
23
23
  })();
24
24
  </script>
25
25
  <!-- !LOAD_METADATA! -->
26
- <script type="module" src="./assets/index-XquuyCWh.js"></script>
27
- <link rel="stylesheet" href="./assets/index-CVf0zraX.css">
26
+ <script type="module" src="./assets/index-DgyW9gjj.js"></script>
27
+ <link rel="stylesheet" href="./assets/index-DYFkX02J.css">
28
28
  </head>
29
29
  <body>
30
30
  <div id="app"></div>
@@ -11726,8 +11726,9 @@ function mockObject(options, object, mockExports = {}) {
11726
11726
  if (isFunction22) {
11727
11727
  const original = this[key];
11728
11728
  const mock2 = spyOn(this, key).mockImplementation(original);
11729
- mock2.mockRestore = () => {
11730
- mock2.mockReset();
11729
+ const origMockReset = mock2.mockReset;
11730
+ mock2.mockRestore = mock2.mockReset = () => {
11731
+ origMockReset.call(mock2);
11731
11732
  mock2.mockImplementation(original);
11732
11733
  return mock2;
11733
11734
  };
@@ -11744,8 +11745,9 @@ function mockObject(options, object, mockExports = {}) {
11744
11745
  const mock = spyOn(newContainer, property);
11745
11746
  if (options.type === "automock") {
11746
11747
  mock.mockImplementation(mockFunction2);
11747
- mock.mockRestore = () => {
11748
- mock.mockReset();
11748
+ const origMockReset = mock.mockReset;
11749
+ mock.mockRestore = mock.mockReset = () => {
11750
+ origMockReset.call(mock);
11749
11751
  mock.mockImplementation(mockFunction2);
11750
11752
  return mock;
11751
11753
  };
@@ -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-BaiNqOPw.js"></script>
8
+ <script type="module" crossorigin src="/__vitest_browser__/tester-D_NUSQO8.js"></script>
9
9
  <link rel="modulepreload" crossorigin href="/__vitest_browser__/utils-Owv5OOOf.js">
10
10
  </head>
11
11
  <body>
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@ import MagicString from 'magic-string';
8
8
  import sirv from 'sirv';
9
9
  import { coverageConfigDefaults } from 'vitest/config';
10
10
  import { fileURLToPath } from 'node:url';
11
- import { P as PlaywrightBrowserProvider, W as WebdriverBrowserProvider } from './webdriver-D0J8HSNX.js';
11
+ import { P as PlaywrightBrowserProvider, W as WebdriverBrowserProvider } from './webdriver-JzwxG3Ek.js';
12
12
  import { resolve as resolve$1, dirname as dirname$1, basename as basename$1, normalize as normalize$1 } from 'node:path';
13
13
  import { mkdir, readFile as readFile$1 } from 'node:fs/promises';
14
14
  import crypto from 'node:crypto';
@@ -16,7 +16,7 @@ import { WebSocketServer } from 'ws';
16
16
  import { parseErrorStacktrace, parseStacktrace } from '@vitest/utils/source-map';
17
17
  import * as nodeos from 'node:os';
18
18
 
19
- var version = "2.2.0-beta.2";
19
+ var version = "3.0.0-beta.1";
20
20
 
21
21
  const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\//;
22
22
  function normalizeWindowsPath(input = "") {
@@ -204,9 +204,7 @@ const clear = async (context, selector) => {
204
204
  if (context.provider instanceof PlaywrightBrowserProvider) {
205
205
  const { iframe } = context;
206
206
  const element = iframe.locator(selector);
207
- await element.clear({
208
- timeout: 1e3
209
- });
207
+ await element.clear();
210
208
  } else if (context.provider instanceof WebdriverBrowserProvider) {
211
209
  const browser = context.browser;
212
210
  const element = await browser.$(selector);
@@ -220,10 +218,7 @@ const click = async (context, selector, options = {}) => {
220
218
  const provider = context.provider;
221
219
  if (provider instanceof PlaywrightBrowserProvider) {
222
220
  const tester = context.iframe;
223
- await tester.locator(selector).click({
224
- timeout: 1e3,
225
- ...options
226
- });
221
+ await tester.locator(selector).click(options);
227
222
  } else if (provider instanceof WebdriverBrowserProvider) {
228
223
  const browser = context.browser;
229
224
  await browser.$(selector).click(options);
@@ -248,7 +243,6 @@ const tripleClick = async (context, selector, options = {}) => {
248
243
  if (provider instanceof PlaywrightBrowserProvider) {
249
244
  const tester = context.iframe;
250
245
  await tester.locator(selector).click({
251
- timeout: 1e3,
252
246
  ...options,
253
247
  clickCount: 3
254
248
  });
@@ -266,10 +260,7 @@ const dragAndDrop = async (context, source, target, options_) => {
266
260
  await frame.dragAndDrop(
267
261
  source,
268
262
  target,
269
- {
270
- timeout: 1e3,
271
- ...options_
272
- }
263
+ options_
273
264
  );
274
265
  } else if (context.provider instanceof WebdriverBrowserProvider) {
275
266
  const $source = context.browser.$(source);
@@ -286,7 +277,7 @@ const fill = async (context, selector, text, options = {}) => {
286
277
  if (context.provider instanceof PlaywrightBrowserProvider) {
287
278
  const { iframe } = context;
288
279
  const element = iframe.locator(selector);
289
- await element.fill(text, { timeout: 1e3, ...options });
280
+ await element.fill(text, options);
290
281
  } else if (context.provider instanceof WebdriverBrowserProvider) {
291
282
  const browser = context.browser;
292
283
  await browser.$(selector).setValue(text);
@@ -426,10 +417,7 @@ const _fileInfo = async ({ project, testPath = process.cwd() }, path, encoding)
426
417
 
427
418
  const hover = async (context, selector, options = {}) => {
428
419
  if (context.provider instanceof PlaywrightBrowserProvider) {
429
- await context.iframe.locator(selector).hover({
430
- timeout: 1e3,
431
- ...options
432
- });
420
+ await context.iframe.locator(selector).hover(options);
433
421
  } else if (context.provider instanceof WebdriverBrowserProvider) {
434
422
  const browser = context.browser;
435
423
  await browser.$(selector).moveTo(options);
@@ -935,7 +923,6 @@ const screenshot = async (context, name, options = {}) => {
935
923
  const { element: selector, ...config } = options;
936
924
  const element = context.iframe.locator(`${selector}`);
937
925
  const buffer2 = await element.screenshot({
938
- timeout: 1e3,
939
926
  ...config,
940
927
  path: savePath
941
928
  });
@@ -997,10 +984,7 @@ const selectOptions = async (context, selector, userValues, options = {}) => {
997
984
  }
998
985
  return elementHandler;
999
986
  }));
1000
- await selectElement.selectOption(values, {
1001
- timeout: 1e3,
1002
- ...options
1003
- });
987
+ await selectElement.selectOption(values, options);
1004
988
  } else if (context.provider instanceof WebdriverBrowserProvider) {
1005
989
  const values = userValues;
1006
990
  if (!values.length) {
@@ -2493,13 +2477,13 @@ class BrowserServer {
2493
2477
  const browser = this.project.config.browser.name;
2494
2478
  if (!browser) {
2495
2479
  throw new Error(
2496
- `[${this.project.getName()}] Browser name is required. Please, set \`test.browser.name\` option manually.`
2480
+ `[${this.project.name}] Browser name is required. Please, set \`test.browser.name\` option manually.`
2497
2481
  );
2498
2482
  }
2499
2483
  const supportedBrowsers = this.provider.getSupportedBrowsers();
2500
2484
  if (supportedBrowsers.length && !supportedBrowsers.includes(browser)) {
2501
2485
  throw new Error(
2502
- `[${this.project.getName()}] Browser "${browser}" is not supported by the browser provider "${this.provider.name}". Supported browsers: ${supportedBrowsers.join(", ")}.`
2486
+ `[${this.project.name}] Browser "${browser}" is not supported by the browser provider "${this.provider.name}". Supported browsers: ${supportedBrowsers.join(", ")}.`
2503
2487
  );
2504
2488
  }
2505
2489
  const providerOptions = this.project.config.browser.providerOptions;
@@ -2578,7 +2562,7 @@ function createBrowserPool(ctx) {
2578
2562
  const origin = resolvedUrls?.local[0] ?? resolvedUrls?.network[0];
2579
2563
  if (!origin) {
2580
2564
  throw new Error(
2581
- `Can't find browser origin URL for project "${project.getName()}" when running tests for files "${files.join('", "')}"`
2565
+ `Can't find browser origin URL for project "${project.name}" when running tests for files "${files.join('", "')}"`
2582
2566
  );
2583
2567
  }
2584
2568
  async function setBreakpoint(contextId, file) {
@@ -2603,7 +2587,7 @@ function createBrowserPool(ctx) {
2603
2587
  }
2604
2588
  debug?.(
2605
2589
  `[%s] Running %s tests in %s chunks (%s threads)`,
2606
- project.getName() || "core",
2590
+ project.name || "core",
2607
2591
  files.length,
2608
2592
  chunks.length,
2609
2593
  threadsCount
package/dist/providers.js CHANGED
@@ -1,4 +1,4 @@
1
- import { W as WebdriverBrowserProvider, P as PlaywrightBrowserProvider } from './webdriver-D0J8HSNX.js';
1
+ import { W as WebdriverBrowserProvider, P as PlaywrightBrowserProvider } from './webdriver-JzwxG3Ek.js';
2
2
 
3
3
  class PreviewBrowserProvider {
4
4
  name = "preview";
@@ -59,8 +59,9 @@ class PlaywrightBrowserProvider {
59
59
  return this.contexts.get(contextId);
60
60
  }
61
61
  const browser = await this.openBrowser();
62
+ const { actionTimeout, ...contextOptions } = this.options?.context ?? {};
62
63
  const options = {
63
- ...this.options?.context,
64
+ ...contextOptions,
64
65
  ignoreHTTPSErrors: true,
65
66
  serviceWorkers: "allow"
66
67
  };
@@ -68,6 +69,9 @@ class PlaywrightBrowserProvider {
68
69
  options.viewport = null;
69
70
  }
70
71
  const context = await browser.newContext(options);
72
+ if (actionTimeout) {
73
+ context.setDefaultTimeout(actionTimeout);
74
+ }
71
75
  this.contexts.set(contextId, context);
72
76
  return context;
73
77
  }
@@ -130,7 +134,7 @@ class PlaywrightBrowserProvider {
130
134
  async openPage(contextId, url, beforeNavigate) {
131
135
  const browserPage = await this.openBrowserPage(contextId);
132
136
  await beforeNavigate?.();
133
- await browserPage.goto(url);
137
+ await browserPage.goto(url, { timeout: 0 });
134
138
  }
135
139
  async getCDPSession(contextId) {
136
140
  const page = this.getPage(contextId);
package/matchers.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import type { Locator } from '@vitest/browser/context'
2
2
  import type jsdomMatchers from './jest-dom.js'
3
- import type { Assertion } from 'vitest'
3
+ import type { Assertion, ExpectPollOptions } from 'vitest'
4
4
 
5
5
  declare module 'vitest' {
6
6
  interface JestAssertion<T = any> extends jsdomMatchers.default.TestingLibraryMatchers<void, T> {}
7
+ interface AsymmetricMatchersContaining extends jsdomMatchers.default.TestingLibraryMatchers<void, void> {}
7
8
 
8
9
  type Promisify<O> = {
9
10
  [K in keyof O]: O[K] extends (...args: infer A) => infer R
@@ -16,6 +17,10 @@ declare module 'vitest' {
16
17
  type PromisifyDomAssertion<T> = Promisify<Assertion<T>>
17
18
 
18
19
  interface ExpectStatic {
20
+ /**
21
+ * `expect.element(locator)` is a shorthand for `expect.poll(() => locator.element())`.
22
+ * You can set default timeout via `expect.poll.timeout` config.
23
+ */
19
24
  element: <T extends Element | Locator>(element: T, options?: ExpectPollOptions) => PromisifyDomAssertion<Awaited<Element | null>>
20
25
  }
21
26
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vitest/browser",
3
3
  "type": "module",
4
- "version": "2.2.0-beta.2",
4
+ "version": "3.0.0-beta.1",
5
5
  "description": "Browser running for Vitest",
6
6
  "license": "MIT",
7
7
  "funding": "https://opencollective.com/vitest",
@@ -32,13 +32,16 @@
32
32
  "default": "./dist/client.js"
33
33
  },
34
34
  "./matchers": {
35
- "types": "./matchers.d.ts"
35
+ "types": "./matchers.d.ts",
36
+ "default": "./dummy.js"
36
37
  },
37
38
  "./providers/webdriverio": {
38
- "types": "./providers/webdriverio.d.ts"
39
+ "types": "./providers/webdriverio.d.ts",
40
+ "default": "./dummy.js"
39
41
  },
40
42
  "./providers/playwright": {
41
- "types": "./providers/playwright.d.ts"
43
+ "types": "./providers/playwright.d.ts",
44
+ "default": "./dummy.js"
42
45
  },
43
46
  "./locator": {
44
47
  "types": "./dist/locators/index.d.ts",
@@ -62,7 +65,7 @@
62
65
  "peerDependencies": {
63
66
  "playwright": "*",
64
67
  "webdriverio": "*",
65
- "vitest": "2.2.0-beta.2"
68
+ "vitest": "3.0.0-beta.1"
66
69
  },
67
70
  "peerDependenciesMeta": {
68
71
  "playwright": {
@@ -78,32 +81,32 @@
78
81
  "dependencies": {
79
82
  "@testing-library/dom": "^10.4.0",
80
83
  "@testing-library/user-event": "^14.5.2",
81
- "magic-string": "^0.30.12",
82
- "msw": "^2.6.4",
84
+ "magic-string": "^0.30.14",
85
+ "msw": "^2.6.6",
83
86
  "sirv": "^3.0.0",
84
87
  "tinyrainbow": "^1.2.0",
85
88
  "ws": "^8.18.0",
86
- "@vitest/mocker": "2.2.0-beta.2",
87
- "@vitest/utils": "2.2.0-beta.2"
89
+ "@vitest/mocker": "3.0.0-beta.1",
90
+ "@vitest/utils": "3.0.0-beta.1"
88
91
  },
89
92
  "devDependencies": {
90
93
  "@testing-library/jest-dom": "^6.6.3",
91
94
  "@types/ws": "^8.5.13",
92
95
  "@wdio/protocols": "^8.40.3",
93
96
  "birpc": "0.2.19",
94
- "flatted": "^3.3.1",
97
+ "flatted": "^3.3.2",
95
98
  "ivya": "^1.1.1",
96
99
  "mime": "^4.0.4",
97
100
  "pathe": "^1.1.2",
98
101
  "periscopic": "^4.0.2",
99
- "playwright": "^1.48.2",
100
- "playwright-core": "^1.48.2",
101
- "safaridriver": "^0.1.2",
102
+ "playwright": "^1.49.0",
103
+ "playwright-core": "^1.49.0",
104
+ "safaridriver": "^1.0.0",
102
105
  "webdriverio": "^8.40.6",
103
- "@vitest/runner": "2.2.0-beta.2",
104
- "vitest": "2.2.0-beta.2",
105
- "@vitest/ui": "2.2.0-beta.2",
106
- "@vitest/ws-client": "2.2.0-beta.2"
106
+ "@vitest/ui": "3.0.0-beta.1",
107
+ "@vitest/runner": "3.0.0-beta.1",
108
+ "@vitest/ws-client": "3.0.0-beta.1",
109
+ "vitest": "3.0.0-beta.1"
107
110
  },
108
111
  "scripts": {
109
112
  "build": "rimraf dist && pnpm build:node && pnpm build:client",
@@ -16,7 +16,13 @@ declare module 'vitest/node' {
16
16
  context?: Omit<
17
17
  BrowserContextOptions,
18
18
  'ignoreHTTPSErrors' | 'serviceWorkers'
19
- >
19
+ > & {
20
+ /**
21
+ * The maximum time in milliseconds to wait for `userEvent` action to complete.
22
+ * @default 0 (no timeout)
23
+ */
24
+ actionTimeout?: number
25
+ }
20
26
  }
21
27
 
22
28
  export interface BrowserCommandContext {
@@ -27,13 +33,13 @@ declare module 'vitest/node' {
27
33
  }
28
34
  }
29
35
 
30
- type PWHoverOptions = Parameters<Page['hover']>[1]
31
- type PWClickOptions = Parameters<Page['click']>[1]
32
- type PWDoubleClickOptions = Parameters<Page['dblclick']>[1]
33
- type PWFillOptions = Parameters<Page['fill']>[2]
34
- type PWScreenshotOptions = Parameters<Page['screenshot']>[0]
35
- type PWSelectOptions = Parameters<Page['selectOption']>[2]
36
- type PWDragAndDropOptions = Parameters<Page['dragAndDrop']>[2]
36
+ type PWHoverOptions = NonNullable<Parameters<Page['hover']>[1]>
37
+ type PWClickOptions = NonNullable<Parameters<Page['click']>[1]>
38
+ type PWDoubleClickOptions = NonNullable<Parameters<Page['dblclick']>[1]>
39
+ type PWFillOptions = NonNullable<Parameters<Page['fill']>[2]>
40
+ type PWScreenshotOptions = NonNullable<Parameters<Page['screenshot']>[0]>
41
+ type PWSelectOptions = NonNullable<Parameters<Page['selectOption']>[2]>
42
+ type PWDragAndDropOptions = NonNullable<Parameters<Page['dragAndDrop']>[2]>
37
43
 
38
44
  declare module '@vitest/browser/context' {
39
45
  export interface UserEventHoverOptions extends PWHoverOptions {}