Skip to content

Commit 5376d5b

Browse files
authored
fix(ui): auto reload coverage iframe after test run (#5242)
1 parent 3815554 commit 5376d5b

File tree

5 files changed

+26
-3
lines changed

5 files changed

+26
-3
lines changed

packages/ui/client/composables/client/index.ts

+6
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ export const client = (function createVitestClient() {
2929
testRunState.value = 'idle'
3030
unhandledErrors.value = (errors || []).map(parseError)
3131
},
32+
onFinishedReportCoverage() {
33+
// reload coverage iframe
34+
const iframe = document.querySelector('iframe#vitest-ui-coverage')
35+
if (iframe instanceof HTMLIFrameElement && iframe.contentWindow)
36+
iframe.contentWindow.location.reload()
37+
},
3238
},
3339
})
3440
}

packages/vitest/src/api/setup.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ export function setup(vitestOrWorkspace: Vitest | WorkspaceProject, _server?: Vi
162162
{
163163
post: msg => ws.send(msg),
164164
on: fn => ws.on('message', fn),
165-
eventNames: ['onUserConsoleLog', 'onFinished', 'onCollected', 'onCancel'],
165+
eventNames: ['onUserConsoleLog', 'onFinished', 'onFinishedReportCoverage', 'onCollected', 'onCancel'],
166166
serialize: (data: any) => stringify(data, stringifyReplace),
167167
deserialize: parse,
168168
onTimeoutError(functionName) {
@@ -183,7 +183,7 @@ export function setup(vitestOrWorkspace: Vitest | WorkspaceProject, _server?: Vi
183183
ctx.reporters.push(new WebSocketReporter(ctx, wss, clients))
184184
}
185185

186-
class WebSocketReporter implements Reporter {
186+
export class WebSocketReporter implements Reporter {
187187
constructor(
188188
public ctx: Vitest,
189189
public wss: WebSocketServer,
@@ -226,6 +226,12 @@ class WebSocketReporter implements Reporter {
226226
})
227227
}
228228

229+
onFinishedReportCoverage() {
230+
this.clients.forEach((client) => {
231+
client.onFinishedReportCoverage?.()
232+
})
233+
}
234+
229235
onUserConsoleLog(log: UserConsoleLog) {
230236
this.clients.forEach((client) => {
231237
client.onUserConsoleLog?.(log)

packages/vitest/src/api/types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,5 @@ export interface WebSocketHandlers {
3939

4040
export interface WebSocketEvents extends Pick<Reporter, 'onCollected' | 'onFinished' | 'onTaskUpdate' | 'onUserConsoleLog' | 'onPathsCollected'> {
4141
onCancel: (reason: CancelReason) => void
42+
onFinishedReportCoverage: () => void
4243
}

packages/vitest/src/node/core.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { getCoverageProvider } from '../integrations/coverage'
1616
import type { BrowserProvider } from '../types/browser'
1717
import { CONFIG_NAMES, configFiles, workspacesFiles as workspaceFiles } from '../constants'
1818
import { rootDir } from '../paths'
19+
import { WebSocketReporter } from '../api/setup'
1920
import { createPool } from './pool'
2021
import type { ProcessPool, WorkspaceSpec } from './pool'
2122
import { createBenchmarkReporters, createReporters } from './reporters/utils'
@@ -800,8 +801,14 @@ export class Vitest {
800801
if (!this.config.coverage.reportOnFailure && this.state.getCountOfFailedTests() > 0)
801802
return
802803

803-
if (this.coverageProvider)
804+
if (this.coverageProvider) {
804805
await this.coverageProvider.reportCoverage({ allTestsRun })
806+
// notify coverage iframe reload
807+
for (const reporter of this.reporters) {
808+
if (reporter instanceof WebSocketReporter)
809+
reporter.onFinishedReportCoverage()
810+
}
811+
}
805812
}
806813

807814
async close() {

packages/ws-client/src/index.ts

+3
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ export function createClient(url: string, options: VitestClientOptions = {}) {
7070
onFinished(files, errors) {
7171
handlers.onFinished?.(files, errors)
7272
},
73+
onFinishedReportCoverage() {
74+
handlers.onFinishedReportCoverage?.()
75+
},
7376
onCancel(reason: CancelReason) {
7477
handlers.onCancel?.(reason)
7578
},

0 commit comments

Comments
 (0)