diff --git a/packages/vitest/src/node/cli.ts b/packages/vitest/src/node/cli.ts index 187cfd48a163..2feb8fa61201 100644 --- a/packages/vitest/src/node/cli.ts +++ b/packages/vitest/src/node/cli.ts @@ -22,6 +22,7 @@ cli .option('--silent', 'silent console output from tests') .option('--isolate', 'isolate environment for each test file (default: true)') .option('--reporter ', 'reporter') + .option('--outputTruncateLength ', 'diff output length') .option('--outputFile ', 'write test results to a file when the --reporter=json option is also specified') .option('--coverage', 'use c8 for coverage') .option('--run', 'do not watch') diff --git a/packages/vitest/src/node/diff.ts b/packages/vitest/src/node/diff.ts index 0d81599da3fb..b1d325d8b897 100644 --- a/packages/vitest/src/node/diff.ts +++ b/packages/vitest/src/node/diff.ts @@ -2,8 +2,8 @@ import c from 'picocolors' import * as diff from 'diff' import cliTruncate from 'cli-truncate' -export function formatLine(line: string) { - return cliTruncate(line, (process.stdout.columns || 80) - 4) +export function formatLine(line: string, outputTruncateLength?: number) { + return cliTruncate(line, (outputTruncateLength ?? (process.stdout.columns || 80)) - 4) } /** @@ -15,7 +15,7 @@ export function formatLine(line: string) { * @return {string} The diff. */ -export function unifiedDiff(actual: string, expected: string) { +export function unifiedDiff(actual: string, expected: string, outputTruncateLength?: number) { if (actual === expected) return '' @@ -54,16 +54,16 @@ export function unifiedDiff(actual: string, expected: string) { let formatted = lines.map((line: string) => { if (line[0] === '-') { - line = formatLine(line.slice(1)) + line = formatLine(line.slice(1), outputTruncateLength) if (isCompact) return c.green(line) - return c.green(`- ${formatLine(line)}`) + return c.green(`- ${formatLine(line, outputTruncateLength)}`) } if (line[0] === '+') { - line = formatLine(line.slice(1)) + line = formatLine(line.slice(1), outputTruncateLength) if (isCompact) return c.red(line) - return c.red(`+ ${formatLine(line)}`) + return c.red(`+ ${formatLine(line, outputTruncateLength)}`) } if (line.match(/@@/)) return '--' diff --git a/packages/vitest/src/node/error.ts b/packages/vitest/src/node/error.ts index 56f46d97a779..cc3daa6d1d70 100644 --- a/packages/vitest/src/node/error.ts +++ b/packages/vitest/src/node/error.ts @@ -40,7 +40,7 @@ export async function printError(error: unknown, ctx: Vitest) { handleImportOutsideModuleError(e.stack || e.stackStr || '', ctx) if (e.showDiff) - displayDiff(e.actual, e.expected, ctx.console) + displayDiff(e.actual, e.expected, ctx.console, ctx.config.outputTruncateLength) } const esmErrors = [ @@ -79,8 +79,8 @@ function handleImportOutsideModuleError(stack: string, ctx: Vitest) { }\n`))) } -function displayDiff(actual: string, expected: string, console: Console) { - console.error(c.gray(unifiedDiff(actual, expected)) + '\n') +function displayDiff(actual: string, expected: string, console: Console, outputTruncateLength?: number) { + console.error(c.gray(unifiedDiff(actual, expected, outputTruncateLength)) + '\n') } function printErrorMessage(error: ErrorWithDiff, console: Console) { diff --git a/packages/vitest/src/types/config.ts b/packages/vitest/src/types/config.ts index 7a8aed92b205..39c4cf5c71ce 100644 --- a/packages/vitest/src/types/config.ts +++ b/packages/vitest/src/types/config.ts @@ -137,6 +137,11 @@ export interface InlineConfig { */ reporters?: Arrayable + /** + * diff output length + */ + outputTruncateLength?: number + /** * Write test results to a file when the --reporter=json option is also specified */