Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(browser): rename none provider to preview, make it default #5826

Merged
merged 3 commits into from
Jun 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/guide/browser.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ This page provides information about the experimental browser mode feature in th

## Installation

By default, Browser Mode doesn't require any provider to run tests locally because it reuses your existing browser.
By default, Browser Mode doesn't require any additional E2E provider to run tests locally because it reuses your existing browser.

::: code-group
```bash [npm]
Expand All @@ -26,7 +26,7 @@ bun add -D vitest @vitest/browser
:::

::: warning
However, to run tests in CI you need to install either [`playwright`](https://npmjs.com/package/playwright) or [`webdriverio`](https://www.npmjs.com/package/webdriverio). We also recommend switching to either one of them for testing locally instead of using the default `none` provider since it relies on simulating events instead of using Chrome DevTools Protocol.
However, to run tests in CI you need to install either [`playwright`](https://npmjs.com/package/playwright) or [`webdriverio`](https://www.npmjs.com/package/webdriverio). We also recommend switching to either one of them for testing locally instead of using the default `preview` provider since it relies on simulating events instead of using Chrome DevTools Protocol.
:::

### Using Playwright
Expand Down Expand Up @@ -208,7 +208,7 @@ export const server: {

/**
* Handler for user interactions. The support is provided by the browser provider (`playwright` or `webdriverio`).
* If used with `none` provider, fallbacks to simulated events via `@testing-library/user-event`.
* If used with `preview` provider, fallbacks to simulated events via `@testing-library/user-event`.
* @experimental
*/
export const userEvent: {
Expand Down
1 change: 1 addition & 0 deletions examples/lit/vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ export default defineConfig({
browser: {
enabled: true,
name: 'chrome',
provider: 'webdriverio',
},
},
})
2 changes: 1 addition & 1 deletion packages/browser/context.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ export const server: {

/**
* Handler for user interactions. The support is provided by the browser provider (`playwright` or `webdriverio`).
* If used with `none` provider, fallbacks to simulated events via `@testing-library/user-event`.
* If used with `preview` provider, fallbacks to simulated events via `@testing-library/user-event`.
* @experimental
*/
export const userEvent: UserEvent
Expand Down
10 changes: 5 additions & 5 deletions packages/browser/providers.d.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { BrowserProvider } from 'vitest/node'
import type { BrowserProviderModule } from 'vitest/node'

declare const webdriverio: BrowserProvider
declare const playwright: BrowserProvider
declare const none: BrowserProvider
declare const webdriverio: BrowserProviderModule
declare const playwright: BrowserProviderModule
declare const preview: BrowserProviderModule

export { webdriverio, playwright, none }
export { webdriverio, playwright, preview }
4 changes: 2 additions & 2 deletions packages/browser/src/node/plugins/pluginContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ function getPathTo(element) {
}

async function getUserEventImport(provider: BrowserProvider, resolve: (id: string, importer: string) => Promise<null | { id: string }>) {
if (provider.name !== 'none')
if (provider.name !== 'preview')
return ''
const resolved = await resolve('@testing-library/user-event', __dirname)
if (!resolved)
Expand All @@ -125,7 +125,7 @@ async function getUserEventImport(provider: BrowserProvider, resolve: (id: strin
}

function getUserEventScript(project: WorkspaceProject) {
if (project.browserProvider?.name === 'none')
if (project.browserProvider?.name === 'preview')
return `__vitest_user_event__`
return `{
async click(element, options) {
Expand Down
4 changes: 2 additions & 2 deletions packages/browser/src/node/providers/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { PlaywrightBrowserProvider } from './playwright'
import { WebdriverBrowserProvider } from './webdriver'
import { NoneBrowserProvider } from './none'
import { PreviewBrowserProvider } from './preview'

export const webdriverio = WebdriverBrowserProvider
export const playwright = PlaywrightBrowserProvider
export const none = NoneBrowserProvider
export const preview = PreviewBrowserProvider
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { BrowserProvider, WorkspaceProject } from 'vitest/node'

export class NoneBrowserProvider implements BrowserProvider {
public name = 'none'
export class PreviewBrowserProvider implements BrowserProvider {
public name = 'preview'
private ctx!: WorkspaceProject
private open = false

Expand All @@ -18,7 +18,7 @@ export class NoneBrowserProvider implements BrowserProvider {
this.ctx = ctx
this.open = false
if (ctx.config.browser.headless)
throw new Error('You\'ve enabled headless mode for "none" provider but it doesn\'t support it.')
throw new Error('You\'ve enabled headless mode for "preview" provider but it doesn\'t support it.')
}

async openPage(_url: string) {
Expand Down
10 changes: 3 additions & 7 deletions packages/vitest/src/integrations/browser.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
import type { WorkspaceProject } from '../node/workspace'
import type { BrowserProviderModule, ResolvedBrowserOptions } from '../types/browser'

const builtinProviders = ['webdriverio', 'playwright', 'none']
const builtinProviders = ['webdriverio', 'playwright', 'preview']

export async function getBrowserProvider(options: ResolvedBrowserOptions, project: WorkspaceProject): Promise<BrowserProviderModule> {
if (options.provider == null || builtinProviders.includes(options.provider)) {
await project.ctx.packageInstaller.ensureInstalled('@vitest/browser', project.config.root)
const providers = await project.runner.executeId('@vitest/browser/providers') as {
webdriverio: BrowserProviderModule
playwright: BrowserProviderModule
none: BrowserProviderModule
}
const provider = (options.provider || 'webdriverio') as 'webdriverio' | 'playwright' | 'none'
const providers = await project.runner.executeId('@vitest/browser/providers') as typeof import('@vitest/browser/providers')
const provider = (options.provider || 'preview') as 'webdriverio' | 'playwright' | 'preview'
return providers[provider]
}

Expand Down
2 changes: 1 addition & 1 deletion packages/vitest/src/node/cli/cli-config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ export const cliOptionsConfig: VitestCLIOptions = {
subcommands: apiConfig(defaultBrowserPort),
},
provider: {
description: 'Provider used to run browser tests. Some browsers are only available for specific providers. Can be "webdriverio", "playwright", or the path to a custom provider. Visit [`browser.provider`](https://vitest.dev/config/#browser-provider) for more information (default: `"webdriverio"`)',
description: 'Provider used to run browser tests. Some browsers are only available for specific providers. Can be "webdriverio", "playwright", "preview", or the path to a custom provider. Visit [`browser.provider`](https://vitest.dev/config/#browser-provider) for more information (default: `"preview"`)',
argument: '<name>',
subcommands: null, // don't support custom objects
},
Expand Down
4 changes: 2 additions & 2 deletions packages/vitest/src/types/browser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ export interface BrowserConfigOptions {
/**
* Browser provider
*
* @default 'webdriverio'
* @default 'preview'
*/
provider?: 'webdriverio' | 'playwright' | 'none' | (string & {})
provider?: 'webdriverio' | 'playwright' | 'preview' | (string & {})

/**
* Options that are passed down to a browser provider.
Expand Down
1 change: 0 additions & 1 deletion test/browser/fixtures/mocking/vitest.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ export default defineConfig({
provider,
name,
headless: true,
fileParallelism: false,
},
},
})
1 change: 1 addition & 0 deletions test/config/fixtures/bail/vitest.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ export default defineConfig({
browser: {
headless: true,
name: 'chrome',
provider: 'webdriverio',
},
},
})
Loading