From d37f36ff5cf79deb81ca0214d769a93f14e17dfa Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Wed, 31 May 2023 11:28:34 +0200 Subject: [PATCH 1/6] fix(logger): print unhandled errors before summary --- packages/vitest/src/node/reporters/base.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/packages/vitest/src/node/reporters/base.ts b/packages/vitest/src/node/reporters/base.ts index 2a55523f19ee..5d89b516448b 100644 --- a/packages/vitest/src/node/reporters/base.ts +++ b/packages/vitest/src/node/reporters/base.ts @@ -51,11 +51,10 @@ export abstract class BaseReporter implements Reporter { async onFinished(files = this.ctx.state.getFiles(), errors = this.ctx.state.getUnhandledErrors()) { this.end = performance.now() - await this.reportSummary(files) + await this.reportSummary(files, errors) if (errors.length) { if (!this.ctx.config.dangerouslyIgnoreUnhandledErrors) process.exitCode = 1 - await this.ctx.logger.printUnhandledErrors(errors) } } @@ -208,15 +207,16 @@ export abstract class BaseReporter implements Reporter { ))) } - async reportSummary(files: File[]) { + async reportSummary(files: File[], errors: unknown[]) { await this.printErrorsSummary(files) + await this.ctx.logger.printUnhandledErrors(errors) if (this.mode === 'benchmark') await this.reportBenchmarkSummary(files) else - await this.reportTestSummary(files) + await this.reportTestSummary(files, errors) } - async reportTestSummary(files: File[]) { + async reportTestSummary(files: File[], errors: unknown[]) { const tests = getTests(files) const logger = this.ctx.logger @@ -262,6 +262,8 @@ export abstract class BaseReporter implements Reporter { const failed = tests.filter(t => t.meta?.typecheck && t.result?.errors?.length) logger.log(padTitle('Type Errors'), failed.length ? c.bold(c.red(`${failed.length} failed`)) : c.dim('no errors')) } + if (errors.length) + logger.log(padTitle('Errors'), c.bold(c.red(`${errors.length} failed`))) logger.log(padTitle('Start at'), formatTimeString(this._timeStart)) if (this.watchFilters) logger.log(padTitle('Duration'), time(threadTime)) From 3c3a20462b02ff52a26ac25781abdb68b3557064 Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Wed, 31 May 2023 11:38:41 +0200 Subject: [PATCH 2/6] chore: improve log --- packages/vitest/src/node/reporters/base.ts | 11 +++++++---- packages/vitest/src/utils/tasks.ts | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/vitest/src/node/reporters/base.ts b/packages/vitest/src/node/reporters/base.ts index 5d89b516448b..a5aad35b86f2 100644 --- a/packages/vitest/src/node/reporters/base.ts +++ b/packages/vitest/src/node/reporters/base.ts @@ -208,8 +208,7 @@ export abstract class BaseReporter implements Reporter { } async reportSummary(files: File[], errors: unknown[]) { - await this.printErrorsSummary(files) - await this.ctx.logger.printUnhandledErrors(errors) + await this.printErrorsSummary(files, errors) if (this.mode === 'benchmark') await this.reportBenchmarkSummary(files) else @@ -263,7 +262,7 @@ export abstract class BaseReporter implements Reporter { logger.log(padTitle('Type Errors'), failed.length ? c.bold(c.red(`${failed.length} failed`)) : c.dim('no errors')) } if (errors.length) - logger.log(padTitle('Errors'), c.bold(c.red(`${errors.length} failed`))) + logger.log(padTitle('Errors'), c.bold(c.red(`${errors.length} error${errors.length > 1 ? 's' : ''}`))) logger.log(padTitle('Start at'), formatTimeString(this._timeStart)) if (this.watchFilters) logger.log(padTitle('Duration'), time(threadTime)) @@ -275,7 +274,7 @@ export abstract class BaseReporter implements Reporter { logger.log() } - private async printErrorsSummary(files: File[]) { + private async printErrorsSummary(files: File[], errors: unknown[]) { const logger = this.ctx.logger const suites = getSuites(files) const tests = getTests(files) @@ -300,6 +299,10 @@ export abstract class BaseReporter implements Reporter { await this.printTaskErrors(failedTests, errorDivider) } + if (errors.length) { + await logger.printUnhandledErrors(errors) + logger.error() + } return tests } diff --git a/packages/vitest/src/utils/tasks.ts b/packages/vitest/src/utils/tasks.ts index 762d084b07ab..96620cd73127 100644 --- a/packages/vitest/src/utils/tasks.ts +++ b/packages/vitest/src/utils/tasks.ts @@ -10,7 +10,7 @@ export function hasBenchmark(suite: Arrayable): boolean { export function hasFailedSnapshot(suite: Arrayable): boolean { return getTests(suite).some((s) => { - return s.result?.errors?.some(e => e && e.message && e.message.match(/Snapshot .* mismatched/)) + return s.result?.errors?.some(e => typeof e?.message === 'string' && e.message.match(/Snapshot .* mismatched/)) }) } From f4b16e24a310debe41c30f4a6c1427ce0aa021cd Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Wed, 31 May 2023 11:44:43 +0200 Subject: [PATCH 3/6] chore: fix basic --- packages/vitest/src/node/reporters/basic.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vitest/src/node/reporters/basic.ts b/packages/vitest/src/node/reporters/basic.ts index e67e31cdc760..a6b2b3632a90 100644 --- a/packages/vitest/src/node/reporters/basic.ts +++ b/packages/vitest/src/node/reporters/basic.ts @@ -4,9 +4,9 @@ import { BaseReporter } from './base' export class BasicReporter extends BaseReporter { isTTY = false - reportSummary(files: File[]) { + reportSummary(files: File[], errors: unknown[]) { // non-tty mode doesn't add a new line this.ctx.logger.log() - return super.reportSummary(files) + return super.reportSummary(files, errors) } } From 4acf6b9558dc6045d6051c64912c673ffcf75d2c Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Wed, 31 May 2023 15:08:38 +0200 Subject: [PATCH 4/6] chore: fix types --- packages/vitest/src/node/reporters/default.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vitest/src/node/reporters/default.ts b/packages/vitest/src/node/reporters/default.ts index e94cb8f86883..97d0c37a00e7 100644 --- a/packages/vitest/src/node/reporters/default.ts +++ b/packages/vitest/src/node/reporters/default.ts @@ -14,7 +14,7 @@ export class DefaultReporter extends BaseReporter { const files = this.ctx.state.getFiles(this.watchFilters) createListRenderer(files, this.rendererOptions).stop() this.ctx.logger.log() - await super.reportSummary(files) + await super.reportSummary(files, this.ctx.state.getUnhandledErrors()) super.onWatcherStart() } From 7d0bfd0341d89a0d2691e67ba397c6583a2b21fd Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Wed, 31 May 2023 15:17:45 +0200 Subject: [PATCH 5/6] chore: fix types --- packages/vitest/src/node/reporters/benchmark/table/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vitest/src/node/reporters/benchmark/table/index.ts b/packages/vitest/src/node/reporters/benchmark/table/index.ts index fb599bc02234..bcff43acfebb 100644 --- a/packages/vitest/src/node/reporters/benchmark/table/index.ts +++ b/packages/vitest/src/node/reporters/benchmark/table/index.ts @@ -14,7 +14,7 @@ export class TableReporter extends BaseReporter { const files = this.ctx.state.getFiles(this.watchFilters) createTableRenderer(files, this.rendererOptions).stop() this.ctx.logger.log() - await super.reportSummary(files) + await super.reportSummary(files, this.ctx.state.getUnhandledErrors()) super.onWatcherStart() } From d9fefe1233e814bf6ce4a06334ec09233747bf08 Mon Sep 17 00:00:00 2001 From: Vladimir Sheremet Date: Wed, 31 May 2023 15:30:13 +0200 Subject: [PATCH 6/6] chore: cleanup --- test/typescript/test/__snapshots__/runner.test.ts.snap | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/test/typescript/test/__snapshots__/runner.test.ts.snap b/test/typescript/test/__snapshots__/runner.test.ts.snap index ff543a322695..4bf1a9c8e894 100644 --- a/test/typescript/test/__snapshots__/runner.test.ts.snap +++ b/test/typescript/test/__snapshots__/runner.test.ts.snap @@ -94,14 +94,8 @@ Breaking changes might not follow semver, please pin Vitest's version when using ⎯⎯⎯⎯⎯⎯ Typecheck Error ⎯⎯⎯⎯⎯⎯⎯ Error: error TS18003: No inputs were found in config file '/tsconfig.vitest-temp.json'. Specified 'include' paths were '[\\"src\\"]' and 'exclude' paths were '[\\"**/dist/**\\",\\"./dist\\"]'. -" -`; -exports[`should fail > typechecks with custom tsconfig 1`] = ` -"TypeCheckError: Expected 1 arguments, but got 0. -TypeCheckError: Expected 1 arguments, but got 0. -TypeCheckError: Expected 1 arguments, but got 0. -TypeCheckError: Expected 1 arguments, but got 0." +" `; exports[`should fail > typecheks with custom tsconfig 1`] = `