Skip to content

Commit fa4634b

Browse files
authored
fix(browser): don't throw a validation error if v8 coverage is used with filtered instances (#7306)
1 parent 7f36b6f commit fa4634b

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

packages/vitest/src/node/config/resolveConfig.ts

+27-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
extraInlineDeps,
2121
} from '../../constants'
2222
import { benchmarkConfigDefaults, configDefaults } from '../../defaults'
23+
import { wildcardPatternToRegExp } from '../../utils/base'
2324
import { isCI, stdProvider } from '../../utils/env'
2425
import { getWorkersCountByPercentage } from '../../utils/workers'
2526
import { VitestCache } from '../cache'
@@ -251,7 +252,7 @@ export function resolveConfig(
251252
}
252253
}
253254

254-
const playwrightChromiumOnly = browser.provider === 'playwright' && (browser.name === 'chromium' || browser.instances?.every(i => i.browser === 'chromium'))
255+
const playwrightChromiumOnly = isPlaywrightChromiumOnly(resolved)
255256

256257
// Browser-mode "Playwright + Chromium" only features:
257258
if (browser.enabled && !playwrightChromiumOnly) {
@@ -891,3 +892,28 @@ export function resolveCoverageReporters(configReporters: NonNullable<BaseCovera
891892

892893
return resolvedReporters
893894
}
895+
896+
function isPlaywrightChromiumOnly(config: ResolvedConfig) {
897+
const browser = config.browser
898+
if (!browser || browser.provider !== 'playwright' || !browser.enabled) {
899+
return false
900+
}
901+
if (browser.name) {
902+
return browser.name === 'chromium'
903+
}
904+
if (!browser.instances) {
905+
return false
906+
}
907+
const filteredProjects = toArray(config.project).map(p => wildcardPatternToRegExp(p))
908+
for (const instance of browser.instances) {
909+
const name = instance.name || (config.name ? `${config.name} (${instance.browser})` : instance.browser)
910+
// browser config is filtered out
911+
if (filteredProjects.length && !filteredProjects.every(p => p.test(name))) {
912+
continue
913+
}
914+
if (instance.browser !== 'chromium') {
915+
return false
916+
}
917+
}
918+
return true
919+
}

test/config/test/browser-configs.test.ts

+22
Original file line numberDiff line numberDiff line change
@@ -175,3 +175,25 @@ test('inherits browser options', async () => {
175175
},
176176
])
177177
})
178+
179+
test('coverage provider v8 works correctly in browser mode if instances are filtered', async () => {
180+
const { projects } = await vitest({
181+
project: 'chromium',
182+
coverage: {
183+
enabled: true,
184+
provider: 'v8',
185+
},
186+
browser: {
187+
enabled: true,
188+
provider: 'playwright',
189+
instances: [
190+
{ browser: 'chromium' },
191+
{ browser: 'firefox' },
192+
{ browser: 'webkit' },
193+
],
194+
},
195+
})
196+
expect(projects.map(p => p.name)).toEqual([
197+
'chromium',
198+
])
199+
})

0 commit comments

Comments
 (0)