[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: log racing

Anthony Fu (Dec 10, 2021, 1:53 PM +0800) cd06620b e8c3a4b3

+18 -9
+4
src/utils.ts
··· 40 40 return toArray(suite).flatMap(s => s.tasks.flatMap(c => c.type === 'test' ? [c] : getTests(c))) 41 41 } 42 42 43 + export function getTasks(tasks: Arrayable<Task>): Task[] { 44 + return toArray(tasks).flatMap(s => s.type === 'test' ? [s] : [s, ...getTasks(s.tasks)]) 45 + } 46 + 43 47 export function getSuites(suite: Arrayable<Task>): Suite[] { 44 48 return toArray(suite).flatMap(s => s.type === 'suite' ? [s, ...getSuites(s.tasks)] : []) 45 49 }
+14 -9
src/reporters/default.ts
··· 3 3 import { relative } from 'path' 4 4 import c from 'picocolors' 5 5 import { File, Reporter, RunnerContext, ResolvedConfig } from '../types' 6 - import { getSuites, getTests } from '../utils' 6 + import { getSuites, getTasks, getTests } from '../utils' 7 7 import { printError } from './error' 8 8 import { createRenderer } from './renderer' 9 9 10 10 export class DefaultReporter implements Reporter { 11 11 start = 0 12 12 end = 0 13 - renderer: ReturnType<typeof createRenderer> = undefined! 13 + renderer: ReturnType<typeof createRenderer> | undefined 14 14 15 15 constructor(public config: ResolvedConfig) {} 16 16 ··· 19 19 } 20 20 21 21 onStart() { 22 - this.start = performance.now() 23 22 console.log(c.green(`Running tests under ${c.gray(this.config.root)}\n`)) 23 + this.start = performance.now() 24 24 } 25 25 26 26 onCollected(files: File[]) { ··· 29 29 } 30 30 31 31 async onFinished(ctx: RunnerContext, files = ctx.files) { 32 - this.renderer?.stop() 33 - 34 32 this.end = performance.now() 33 + 34 + await this.stopListRender() 35 35 36 36 console.log() 37 37 ··· 79 79 } 80 80 81 81 async onWatcherStart(ctx: RunnerContext) { 82 - // await this.listrPromise 83 - this.renderer?.stop() 82 + await this.stopListRender() 84 83 85 - const failed = ctx.tests.filter(i => i.result?.state === 'fail') 84 + const failed = getTasks(ctx.files).filter(i => i.result?.state === 'fail') 86 85 if (failed.length) 87 86 console.log(`\n${c.bold(c.inverse(c.red(' FAIL ')))}${c.red(` ${failed.length} tests failed. Watching for file changes...`)}`) 88 87 else ··· 90 89 } 91 90 92 91 async onWatcherRerun(files: string[], trigger: string) { 93 - this.renderer?.stop() 92 + await this.stopListRender() 94 93 95 94 console.clear() 96 95 console.log(c.blue('Re-running tests...') + c.dim(` [ ${this.relative(trigger)} ]\n`)) 96 + } 97 + 98 + async stopListRender() { 99 + this.renderer?.stop() 100 + this.renderer = undefined 101 + await new Promise(resolve => setTimeout(resolve, 100)) 97 102 } 98 103 }