From 7e6a62af0a625255574f28466531f55136921cdf Mon Sep 17 00:00:00 2001 From: Massimiliano Mirra Date: Sun, 31 Dec 2023 13:22:39 +0000 Subject: [PATCH] fix: match jest json output by making json reporter output ndjson-compatible (#4824) --- packages/vitest/src/node/reporters/json.ts | 2 +- .../__snapshots__/reporters.spec.ts.snap | 488 +----------------- 2 files changed, 5 insertions(+), 485 deletions(-) diff --git a/packages/vitest/src/node/reporters/json.ts b/packages/vitest/src/node/reporters/json.ts index 00c24888a572..0f59b765abf5 100644 --- a/packages/vitest/src/node/reporters/json.ts +++ b/packages/vitest/src/node/reporters/json.ts @@ -148,7 +148,7 @@ export class JsonReporter implements Reporter { testResults, } - await this.writeReport(JSON.stringify(result, null, 2)) + await this.writeReport(JSON.stringify(result)) } async onFinished(files = this.ctx.state.getFiles()) { diff --git a/test/reporters/tests/__snapshots__/reporters.spec.ts.snap b/test/reporters/tests/__snapshots__/reporters.spec.ts.snap index 2c9d2d79a805..34ffd5c7262d 100644 --- a/test/reporters/tests/__snapshots__/reporters.spec.ts.snap +++ b/test/reporters/tests/__snapshots__/reporters.spec.ts.snap @@ -506,508 +506,28 @@ exports[`json reporter with outputFile 1`] = ` " `; -exports[`json reporter with outputFile 2`] = ` -"{ - "numTotalTestSuites": 3, - "numPassedTestSuites": 3, - "numFailedTestSuites": 0, - "numPendingTestSuites": 0, - "numTotalTests": 9, - "numPassedTests": 8, - "numFailedTests": 1, - "numPendingTests": 0, - "numTodoTests": 1, - "startTime": 1642587001759, - "success": false, - "testResults": [ - { - "assertionResults": [ - { - "ancestorTitles": [ - "suite", - "inner suite" - ], - "fullName": "suite inner suite Math.sqrt()", - "status": "failed", - "title": "Math.sqrt()", - "duration": 1.4422860145568848, - "failureMessages": [ - "expected 2.23606797749979 to equal 2" - ], - "location": { - "line": 8, - "column": 32 - } - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite JSON", - "status": "passed", - "title": "JSON", - "duration": 1.0237109661102295, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite async with timeout", - "status": "skipped", - "title": "async with timeout", - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite timeout", - "status": "passed", - "title": "timeout", - "duration": 100.50598406791687, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback setup success ", - "status": "passed", - "title": "callback setup success ", - "duration": 20.184875011444092, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback test success ", - "status": "passed", - "title": "callback test success ", - "duration": 0.33245420455932617, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback setup success done(false)", - "status": "passed", - "title": "callback setup success done(false)", - "duration": 19.738605976104736, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback test success done(false)", - "status": "passed", - "title": "callback test success done(false)", - "duration": 0.1923508644104004, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite todo test", - "status": "todo", - "title": "todo test", - "failureMessages": [] - } - ], - "startTime": 1642587001759, - "endTime": 1642587001759, - "status": "failed", - "message": "", - "name": "/vitest/test/core/test/basic.test.ts" - } - ] -}" -`; +exports[`json reporter with outputFile 2`] = `"{"numTotalTestSuites":3,"numPassedTestSuites":3,"numFailedTestSuites":0,"numPendingTestSuites":0,"numTotalTests":9,"numPassedTests":8,"numFailedTests":1,"numPendingTests":0,"numTodoTests":1,"startTime":1642587001759,"success":false,"testResults":[{"assertionResults":[{"ancestorTitles":["suite","inner suite"],"fullName":"suite inner suite Math.sqrt()","status":"failed","title":"Math.sqrt()","duration":1.4422860145568848,"failureMessages":["expected 2.23606797749979 to equal 2"],"location":{"line":8,"column":32}},{"ancestorTitles":["suite"],"fullName":"suite JSON","status":"passed","title":"JSON","duration":1.0237109661102295,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite async with timeout","status":"skipped","title":"async with timeout","failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite timeout","status":"passed","title":"timeout","duration":100.50598406791687,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback setup success ","status":"passed","title":"callback setup success ","duration":20.184875011444092,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback test success ","status":"passed","title":"callback test success ","duration":0.33245420455932617,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback setup success done(false)","status":"passed","title":"callback setup success done(false)","duration":19.738605976104736,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback test success done(false)","status":"passed","title":"callback test success done(false)","duration":0.1923508644104004,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite todo test","status":"todo","title":"todo test","failureMessages":[]}],"startTime":1642587001759,"endTime":1642587001759,"status":"failed","message":"","name":"/vitest/test/core/test/basic.test.ts"}]}"`; exports[`json reporter with outputFile in non-existing directory 1`] = ` "JSON report written to /jsonReportDirectory/deeply/nested/report.json " `; -exports[`json reporter with outputFile in non-existing directory 2`] = ` -"{ - "numTotalTestSuites": 3, - "numPassedTestSuites": 3, - "numFailedTestSuites": 0, - "numPendingTestSuites": 0, - "numTotalTests": 9, - "numPassedTests": 8, - "numFailedTests": 1, - "numPendingTests": 0, - "numTodoTests": 1, - "startTime": 1642587001759, - "success": false, - "testResults": [ - { - "assertionResults": [ - { - "ancestorTitles": [ - "suite", - "inner suite" - ], - "fullName": "suite inner suite Math.sqrt()", - "status": "failed", - "title": "Math.sqrt()", - "duration": 1.4422860145568848, - "failureMessages": [ - "expected 2.23606797749979 to equal 2" - ], - "location": { - "line": 8, - "column": 32 - } - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite JSON", - "status": "passed", - "title": "JSON", - "duration": 1.0237109661102295, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite async with timeout", - "status": "skipped", - "title": "async with timeout", - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite timeout", - "status": "passed", - "title": "timeout", - "duration": 100.50598406791687, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback setup success ", - "status": "passed", - "title": "callback setup success ", - "duration": 20.184875011444092, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback test success ", - "status": "passed", - "title": "callback test success ", - "duration": 0.33245420455932617, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback setup success done(false)", - "status": "passed", - "title": "callback setup success done(false)", - "duration": 19.738605976104736, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback test success done(false)", - "status": "passed", - "title": "callback test success done(false)", - "duration": 0.1923508644104004, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite todo test", - "status": "todo", - "title": "todo test", - "failureMessages": [] - } - ], - "startTime": 1642587001759, - "endTime": 1642587001759, - "status": "failed", - "message": "", - "name": "/vitest/test/core/test/basic.test.ts" - } - ] -}" -`; +exports[`json reporter with outputFile in non-existing directory 2`] = `"{"numTotalTestSuites":3,"numPassedTestSuites":3,"numFailedTestSuites":0,"numPendingTestSuites":0,"numTotalTests":9,"numPassedTests":8,"numFailedTests":1,"numPendingTests":0,"numTodoTests":1,"startTime":1642587001759,"success":false,"testResults":[{"assertionResults":[{"ancestorTitles":["suite","inner suite"],"fullName":"suite inner suite Math.sqrt()","status":"failed","title":"Math.sqrt()","duration":1.4422860145568848,"failureMessages":["expected 2.23606797749979 to equal 2"],"location":{"line":8,"column":32}},{"ancestorTitles":["suite"],"fullName":"suite JSON","status":"passed","title":"JSON","duration":1.0237109661102295,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite async with timeout","status":"skipped","title":"async with timeout","failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite timeout","status":"passed","title":"timeout","duration":100.50598406791687,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback setup success ","status":"passed","title":"callback setup success ","duration":20.184875011444092,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback test success ","status":"passed","title":"callback test success ","duration":0.33245420455932617,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback setup success done(false)","status":"passed","title":"callback setup success done(false)","duration":19.738605976104736,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback test success done(false)","status":"passed","title":"callback test success done(false)","duration":0.1923508644104004,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite todo test","status":"todo","title":"todo test","failureMessages":[]}],"startTime":1642587001759,"endTime":1642587001759,"status":"failed","message":"","name":"/vitest/test/core/test/basic.test.ts"}]}"`; exports[`json reporter with outputFile object 1`] = ` "JSON report written to /report_object.json " `; -exports[`json reporter with outputFile object 2`] = ` -"{ - "numTotalTestSuites": 3, - "numPassedTestSuites": 3, - "numFailedTestSuites": 0, - "numPendingTestSuites": 0, - "numTotalTests": 9, - "numPassedTests": 8, - "numFailedTests": 1, - "numPendingTests": 0, - "numTodoTests": 1, - "startTime": 1642587001759, - "success": false, - "testResults": [ - { - "assertionResults": [ - { - "ancestorTitles": [ - "suite", - "inner suite" - ], - "fullName": "suite inner suite Math.sqrt()", - "status": "failed", - "title": "Math.sqrt()", - "duration": 1.4422860145568848, - "failureMessages": [ - "expected 2.23606797749979 to equal 2" - ], - "location": { - "line": 8, - "column": 32 - } - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite JSON", - "status": "passed", - "title": "JSON", - "duration": 1.0237109661102295, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite async with timeout", - "status": "skipped", - "title": "async with timeout", - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite timeout", - "status": "passed", - "title": "timeout", - "duration": 100.50598406791687, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback setup success ", - "status": "passed", - "title": "callback setup success ", - "duration": 20.184875011444092, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback test success ", - "status": "passed", - "title": "callback test success ", - "duration": 0.33245420455932617, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback setup success done(false)", - "status": "passed", - "title": "callback setup success done(false)", - "duration": 19.738605976104736, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback test success done(false)", - "status": "passed", - "title": "callback test success done(false)", - "duration": 0.1923508644104004, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite todo test", - "status": "todo", - "title": "todo test", - "failureMessages": [] - } - ], - "startTime": 1642587001759, - "endTime": 1642587001759, - "status": "failed", - "message": "", - "name": "/vitest/test/core/test/basic.test.ts" - } - ] -}" -`; +exports[`json reporter with outputFile object 2`] = `"{"numTotalTestSuites":3,"numPassedTestSuites":3,"numFailedTestSuites":0,"numPendingTestSuites":0,"numTotalTests":9,"numPassedTests":8,"numFailedTests":1,"numPendingTests":0,"numTodoTests":1,"startTime":1642587001759,"success":false,"testResults":[{"assertionResults":[{"ancestorTitles":["suite","inner suite"],"fullName":"suite inner suite Math.sqrt()","status":"failed","title":"Math.sqrt()","duration":1.4422860145568848,"failureMessages":["expected 2.23606797749979 to equal 2"],"location":{"line":8,"column":32}},{"ancestorTitles":["suite"],"fullName":"suite JSON","status":"passed","title":"JSON","duration":1.0237109661102295,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite async with timeout","status":"skipped","title":"async with timeout","failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite timeout","status":"passed","title":"timeout","duration":100.50598406791687,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback setup success ","status":"passed","title":"callback setup success ","duration":20.184875011444092,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback test success ","status":"passed","title":"callback test success ","duration":0.33245420455932617,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback setup success done(false)","status":"passed","title":"callback setup success done(false)","duration":19.738605976104736,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback test success done(false)","status":"passed","title":"callback test success done(false)","duration":0.1923508644104004,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite todo test","status":"todo","title":"todo test","failureMessages":[]}],"startTime":1642587001759,"endTime":1642587001759,"status":"failed","message":"","name":"/vitest/test/core/test/basic.test.ts"}]}"`; exports[`json reporter with outputFile object in non-existing directory 1`] = ` "JSON report written to /jsonReportDirectory_object/deeply/nested/report.json " `; -exports[`json reporter with outputFile object in non-existing directory 2`] = ` -"{ - "numTotalTestSuites": 3, - "numPassedTestSuites": 3, - "numFailedTestSuites": 0, - "numPendingTestSuites": 0, - "numTotalTests": 9, - "numPassedTests": 8, - "numFailedTests": 1, - "numPendingTests": 0, - "numTodoTests": 1, - "startTime": 1642587001759, - "success": false, - "testResults": [ - { - "assertionResults": [ - { - "ancestorTitles": [ - "suite", - "inner suite" - ], - "fullName": "suite inner suite Math.sqrt()", - "status": "failed", - "title": "Math.sqrt()", - "duration": 1.4422860145568848, - "failureMessages": [ - "expected 2.23606797749979 to equal 2" - ], - "location": { - "line": 8, - "column": 32 - } - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite JSON", - "status": "passed", - "title": "JSON", - "duration": 1.0237109661102295, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite async with timeout", - "status": "skipped", - "title": "async with timeout", - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite timeout", - "status": "passed", - "title": "timeout", - "duration": 100.50598406791687, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback setup success ", - "status": "passed", - "title": "callback setup success ", - "duration": 20.184875011444092, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback test success ", - "status": "passed", - "title": "callback test success ", - "duration": 0.33245420455932617, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback setup success done(false)", - "status": "passed", - "title": "callback setup success done(false)", - "duration": 19.738605976104736, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite callback test success done(false)", - "status": "passed", - "title": "callback test success done(false)", - "duration": 0.1923508644104004, - "failureMessages": [] - }, - { - "ancestorTitles": [ - "suite" - ], - "fullName": "suite todo test", - "status": "todo", - "title": "todo test", - "failureMessages": [] - } - ], - "startTime": 1642587001759, - "endTime": 1642587001759, - "status": "failed", - "message": "", - "name": "/vitest/test/core/test/basic.test.ts" - } - ] -}" -`; +exports[`json reporter with outputFile object in non-existing directory 2`] = `"{"numTotalTestSuites":3,"numPassedTestSuites":3,"numFailedTestSuites":0,"numPendingTestSuites":0,"numTotalTests":9,"numPassedTests":8,"numFailedTests":1,"numPendingTests":0,"numTodoTests":1,"startTime":1642587001759,"success":false,"testResults":[{"assertionResults":[{"ancestorTitles":["suite","inner suite"],"fullName":"suite inner suite Math.sqrt()","status":"failed","title":"Math.sqrt()","duration":1.4422860145568848,"failureMessages":["expected 2.23606797749979 to equal 2"],"location":{"line":8,"column":32}},{"ancestorTitles":["suite"],"fullName":"suite JSON","status":"passed","title":"JSON","duration":1.0237109661102295,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite async with timeout","status":"skipped","title":"async with timeout","failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite timeout","status":"passed","title":"timeout","duration":100.50598406791687,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback setup success ","status":"passed","title":"callback setup success ","duration":20.184875011444092,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback test success ","status":"passed","title":"callback test success ","duration":0.33245420455932617,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback setup success done(false)","status":"passed","title":"callback setup success done(false)","duration":19.738605976104736,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite callback test success done(false)","status":"passed","title":"callback test success done(false)","duration":0.1923508644104004,"failureMessages":[]},{"ancestorTitles":["suite"],"fullName":"suite todo test","status":"todo","title":"todo test","failureMessages":[]}],"startTime":1642587001759,"endTime":1642587001759,"status":"failed","message":"","name":"/vitest/test/core/test/basic.test.ts"}]}"`; exports[`tap reporter 1`] = ` "TAP version 13