[READ-ONLY] Mirror of https://github.com/vitest-dev/vitest. Next generation testing framework powered by Vite. vitest.dev
test testing-tools vite
12

Configure Feed

Select the types of activity you want to include in your feed.

fix(ui): auto reload coverage iframe after test run (#5242)

authored by

Hiroshi Ogawa and committed by
GitHub
(Feb 20, 2024, 2:05 PM +0100) 5376d5be 38155548

+26 -3
+3
packages/ws-client/src/index.ts
··· 70 70 onFinished(files, errors) { 71 71 handlers.onFinished?.(files, errors) 72 72 }, 73 + onFinishedReportCoverage() { 74 + handlers.onFinishedReportCoverage?.() 75 + }, 73 76 onCancel(reason: CancelReason) { 74 77 handlers.onCancel?.(reason) 75 78 },
+8 -2
packages/vitest/src/api/setup.ts
··· 162 162 { 163 163 post: msg => ws.send(msg), 164 164 on: fn => ws.on('message', fn), 165 - eventNames: ['onUserConsoleLog', 'onFinished', 'onCollected', 'onCancel'], 165 + eventNames: ['onUserConsoleLog', 'onFinished', 'onFinishedReportCoverage', 'onCollected', 'onCancel'], 166 166 serialize: (data: any) => stringify(data, stringifyReplace), 167 167 deserialize: parse, 168 168 onTimeoutError(functionName) { ··· 183 183 ctx.reporters.push(new WebSocketReporter(ctx, wss, clients)) 184 184 } 185 185 186 - class WebSocketReporter implements Reporter { 186 + export class WebSocketReporter implements Reporter { 187 187 constructor( 188 188 public ctx: Vitest, 189 189 public wss: WebSocketServer, ··· 223 223 onFinished(files?: File[], errors?: unknown[]) { 224 224 this.clients.forEach((client) => { 225 225 client.onFinished?.(files, errors) 226 + }) 227 + } 228 + 229 + onFinishedReportCoverage() { 230 + this.clients.forEach((client) => { 231 + client.onFinishedReportCoverage?.() 226 232 }) 227 233 } 228 234
+1
packages/vitest/src/api/types.ts
··· 39 39 40 40 export interface WebSocketEvents extends Pick<Reporter, 'onCollected' | 'onFinished' | 'onTaskUpdate' | 'onUserConsoleLog' | 'onPathsCollected'> { 41 41 onCancel: (reason: CancelReason) => void 42 + onFinishedReportCoverage: () => void 42 43 }
+8 -1
packages/vitest/src/node/core.ts
··· 16 16 import type { BrowserProvider } from '../types/browser' 17 17 import { CONFIG_NAMES, configFiles, workspacesFiles as workspaceFiles } from '../constants' 18 18 import { rootDir } from '../paths' 19 + import { WebSocketReporter } from '../api/setup' 19 20 import { createPool } from './pool' 20 21 import type { ProcessPool, WorkspaceSpec } from './pool' 21 22 import { createBenchmarkReporters, createReporters } from './reporters/utils' ··· 800 801 if (!this.config.coverage.reportOnFailure && this.state.getCountOfFailedTests() > 0) 801 802 return 802 803 803 - if (this.coverageProvider) 804 + if (this.coverageProvider) { 804 805 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 + } 805 812 } 806 813 807 814 async close() {
+6
packages/ui/client/composables/client/index.ts
··· 29 29 testRunState.value = 'idle' 30 30 unhandledErrors.value = (errors || []).map(parseError) 31 31 }, 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 + }, 32 38 }, 33 39 }) 34 40 }