Skip to content

Commit 2d81ad8

Browse files
authored
fix: preserve coverage report when html reporter overlaps (#9889)
1 parent ae5ec03 commit 2d81ad8

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

packages/ui/node/reporter.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,12 @@ export default class HTMLReporter implements Reporter {
159159
if (this.ctx.config.coverage.enabled && this.ctx.config.coverage.htmlDir) {
160160
const coverageHtmlDir = this.ctx.config.coverage.htmlDir
161161
const destCoverageDir = resolve(this.reporterDir, 'coverage')
162+
if (coverageHtmlDir === destCoverageDir) {
163+
// skip and preserve already generated coverage report.
164+
// this can happen when users configures `outputFile`
165+
// next to `coverage.reportsDirectory`.
166+
return
167+
}
162168
await fs.rm(destCoverageDir, { recursive: true, force: true })
163169
await fs.mkdir(destCoverageDir, { recursive: true })
164170
await fs.cp(coverageHtmlDir, destCoverageDir, { recursive: true })

test/cli/test/reporters/html.test.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ test('basic', () => {});
118118
],
119119
},
120120
})
121+
expect(result.stderr).toMatchInlineSnapshot(`""`)
121122
expect(result.errorTree()).toMatchInlineSnapshot(`
122123
{
123124
"basic.test.ts": {
@@ -127,3 +128,45 @@ test('basic', () => {});
127128
`)
128129
expect(result.fs.statFile('html/index.html').isFile()).toBe(true)
129130
})
131+
132+
it('html and coverage already next each other', async () => {
133+
const result = await runInlineTests({
134+
'basic.ts': `
135+
export const add = (a: number, b: number) => a + b;
136+
`,
137+
'basic.test.ts': `
138+
import { test, expect } from "vitest";
139+
import { add } from "./basic";
140+
test('add', () => {
141+
expect(add(1, 2)).toBe(3);
142+
});
143+
`,
144+
}, {
145+
reporters: [
146+
'default',
147+
['html', { outputFile: './custom-dir/index.html' }],
148+
],
149+
coverage: {
150+
enabled: true,
151+
reporter: ['html'],
152+
reportsDirectory: './custom-dir/coverage',
153+
},
154+
})
155+
expect(result.stderr).toMatchInlineSnapshot(`""`)
156+
expect(result.errorTree()).toMatchInlineSnapshot(`
157+
{
158+
"basic.test.ts": {
159+
"add": "passed",
160+
},
161+
}
162+
`)
163+
expect({
164+
html: result.fs.statFile('custom-dir/index.html').isFile(),
165+
coverage: result.fs.statFile('custom-dir/coverage/index.html').isFile(),
166+
}).toMatchInlineSnapshot(`
167+
{
168+
"coverage": true,
169+
"html": true,
170+
}
171+
`)
172+
})

0 commit comments

Comments
 (0)