@@ -271,10 +271,11 @@ export function resolveConfig(
271271 }
272272 }
273273
274- const playwrightChromiumOnly = isPlaywrightChromiumOnly ( vitest , resolved )
274+ const containsChromium = hasBrowserChromium ( vitest , resolved )
275+ const hasOnlyChromium = hasOnlyBrowserChromium ( vitest , resolved )
275276
276- // Browser-mode "Playwright + Chromium" only features:
277- if ( browser . enabled && ! playwrightChromiumOnly ) {
277+ // Browser-mode "Chromium" only features:
278+ if ( browser . enabled && ( ! containsChromium || ! hasOnlyChromium ) ) {
278279 const browserConfig = `
279280{
280281 browser: {
@@ -286,18 +287,23 @@ export function resolveConfig(
286287}
287288 ` . trim ( )
288289
290+ const preferredProvider = ( ! browser . provider ?. name || browser . provider . name === 'preview' )
291+ ? 'playwright'
292+ : browser . provider . name
293+ const preferredBrowser = preferredProvider === 'playwright' ? 'chromium' : 'chrome'
289294 const correctExample = `
290295{
291296 browser: {
292- provider: playwright (),
297+ provider: ${ preferredProvider } (),
293298 instances: [
294- { browser: 'chromium ' }
299+ { browser: '${ preferredBrowser } ' }
295300 ],
296301 },
297302}
298303 ` . trim ( )
299304
300- if ( resolved . coverage . enabled && resolved . coverage . provider === 'v8' ) {
305+ // requires all projects to be chromium
306+ if ( ! hasOnlyChromium && resolved . coverage . enabled && resolved . coverage . provider === 'v8' ) {
301307 const coverageExample = `
302308{
303309 coverage: {
@@ -313,7 +319,8 @@ export function resolveConfig(
313319 )
314320 }
315321
316- if ( resolved . inspect || resolved . inspectBrk ) {
322+ // ignores non-chromium browsers when there is at least one chromium project
323+ if ( ! containsChromium && ( resolved . inspect || resolved . inspectBrk ) ) {
317324 const inspectOption = `--inspect${ resolved . inspectBrk ? '-brk' : '' } `
318325
319326 throw new Error (
@@ -846,26 +853,51 @@ export function resolveCoverageReporters(configReporters: NonNullable<BaseCovera
846853 return resolvedReporters
847854}
848855
849- function isPlaywrightChromiumOnly ( vitest : Vitest , config : ResolvedConfig ) {
856+ function isChromiumName ( provider : string , name : string ) {
857+ if ( provider === 'playwright' ) {
858+ return name === 'chromium'
859+ }
860+ return name === 'chrome' || name === 'edge'
861+ }
862+
863+ function hasBrowserChromium ( vitest : Vitest , config : ResolvedConfig ) {
850864 const browser = config . browser
851- if ( ! browser || ! browser . provider || browser . provider . name !== 'playwright ' || ! browser . enabled ) {
865+ if ( ! browser || ! browser . provider || browser . provider . name === 'preview ' || ! browser . enabled ) {
852866 return false
853867 }
854868 if ( browser . name ) {
855- return browser . name === 'chromium'
869+ return isChromiumName ( browser . provider . name , browser . name )
856870 }
857871 if ( ! browser . instances ) {
858872 return false
859873 }
860- for ( const instance of browser . instances ) {
874+ return browser . instances . some ( ( instance ) => {
861875 const name = instance . name || ( config . name ? `${ config . name } (${ instance . browser } )` : instance . browser )
862876 // browser config is filtered out
863877 if ( ! vitest . matchesProjectFilter ( name ) ) {
864- continue
865- }
866- if ( instance . browser !== 'chromium' ) {
867878 return false
868879 }
880+ return isChromiumName ( browser . provider ! . name , instance . browser )
881+ } )
882+ }
883+
884+ function hasOnlyBrowserChromium ( vitest : Vitest , config : ResolvedConfig ) {
885+ const browser = config . browser
886+ if ( ! browser || ! browser . provider || browser . provider . name === 'preview' || ! browser . enabled ) {
887+ return false
869888 }
870- return true
889+ if ( browser . name ) {
890+ return isChromiumName ( browser . provider . name , browser . name )
891+ }
892+ if ( ! browser . instances ) {
893+ return false
894+ }
895+ return browser . instances . every ( ( instance ) => {
896+ const name = instance . name || ( config . name ? `${ config . name } (${ instance . browser } )` : instance . browser )
897+ // browser config is filtered out
898+ if ( ! vitest . matchesProjectFilter ( name ) ) {
899+ return true // ignore this project
900+ }
901+ return isChromiumName ( browser . provider ! . name , instance . browser )
902+ } )
871903}
0 commit comments