Skip to content

Commit

Permalink
fix(browser): support coverage.reportsDirectory with multiple direc…
Browse files Browse the repository at this point in the history
…tories (#5056)
  • Loading branch information
AriPerkkio committed Feb 2, 2024
1 parent 1fa90d1 commit ae73f27
Showing 1 changed file with 45 additions and 1 deletion.
46 changes: 45 additions & 1 deletion packages/browser/src/node/index.ts
@@ -1,9 +1,10 @@
import { fileURLToPath } from 'node:url'

import { resolve } from 'node:path'
import { basename, resolve } from 'pathe'
import sirv from 'sirv'
import type { Plugin } from 'vite'
import type { WorkspaceProject } from 'vitest/node'
import { coverageConfigDefaults } from 'vitest/config'
import { injectVitestModule } from './esmInjector'

export default (project: WorkspaceProject, base = '/'): Plugin[] => {
Expand Down Expand Up @@ -36,6 +37,19 @@ export default (project: WorkspaceProject, base = '/'): Plugin[] => {
},
}),
)

const coverageFolder = resolveCoverageFolder(project)
const coveragePath = coverageFolder ? coverageFolder[1] : undefined
if (coveragePath && base === coveragePath)
throw new Error(`The ui base path and the coverage path cannot be the same: ${base}, change coverage.reportsDirectory`)

coverageFolder && server.middlewares.use(coveragePath!, sirv(coverageFolder[0], {
single: true,
dev: true,
setHeaders: (res) => {
res.setHeader('Cache-Control', 'public,max-age=0,must-revalidate')
},
}))
},
},
{
Expand Down Expand Up @@ -114,3 +128,33 @@ export default (project: WorkspaceProject, base = '/'): Plugin[] => {
},
]
}

function resolveCoverageFolder(project: WorkspaceProject) {
const options = project.ctx.config
const htmlReporter = options.coverage?.enabled
? options.coverage.reporter.find((reporter) => {
if (typeof reporter === 'string')
return reporter === 'html'

return reporter[0] === 'html'
})
: undefined

if (!htmlReporter)
return undefined

// reportsDirectory not resolved yet
const root = resolve(
options.root || options.root || process.cwd(),
options.coverage.reportsDirectory || coverageConfigDefaults.reportsDirectory,
)

const subdir = (Array.isArray(htmlReporter) && htmlReporter.length > 1 && 'subdir' in htmlReporter[1])
? htmlReporter[1].subdir
: undefined

if (!subdir || typeof subdir !== 'string')
return [root, `/${basename(root)}/`]

return [resolve(root, subdir), `/${basename(root)}/${subdir}/`]
}

0 comments on commit ae73f27

Please sign in to comment.