gotwarlost / istanbul

Yet another JS code coverage tool that computes statement, line, function and branch coverage with module loader hooks to transparently add coverage when running tests. Supports all JS coverage use cases including unit tests, server side functional tests and browser tests. Built for scale.
Other
8.7k stars 785 forks source link

"SyntaxError: Unexpected end of JSON input" if coverage.json is empty #883

Closed JoshuaKGoldberg closed 6 years ago

JoshuaKGoldberg commented 6 years ago

This started popping up in my CI error logs and took an embarrassing amount of time to track down. Could we get better error messages for this edge case?

Expected if coverage.json is blank:

Error: Expected 'coverage.json' to contain coverage information, but it is blank.
    at C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\lib\command\report.js:110:44
    at Array.forEach (<anonymous>)
    at C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\lib\command\report.js:109:19
    at C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\lib\util\file-matcher.js:39:20
    at f (C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\node_modules\once\once.js:25:25)
    at Glob.<anonymous> (C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\node_modules\glob\glob.js:133:7)
    at Glob.emit (events.js:127:13)
    at Glob._finish (C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\node_modules\glob\glob.js:172:8)
    at done (C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\node_modules\glob\glob.js:159:12)

Expected if coverage.json is otherwise invalid:

Error: 'coverage.json' contains invalid JSON: Unexpected end of JSON input.
    at C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\lib\command\report.js:110:44
    at Array.forEach (<anonymous>)
    at C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\lib\command\report.js:109:19
    at C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\lib\util\file-matcher.js:39:20
    at f (C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\node_modules\once\once.js:25:25)
    at Glob.<anonymous> (C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\node_modules\glob\glob.js:133:7)
    at Glob.emit (events.js:127:13)
    at Glob._finish (C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\node_modules\glob\glob.js:172:8)
    at done (C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\node_modules\glob\glob.js:159:12)

Actual:

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\lib\command\report.js:110:44
    at Array.forEach (<anonymous>)
    at C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\lib\command\report.js:109:19
    at C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\lib\util\file-matcher.js:39:20
    at f (C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\node_modules\once\once.js:25:25)
    at Glob.<anonymous> (C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\node_modules\glob\glob.js:133:7)
    at Glob.emit (events.js:127:13)
    at Glob._finish (C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\node_modules\glob\glob.js:172:8)
    at done (C:\Users\Dioge\AppData\Roaming\npm\node_modules\istanbul\node_modules\glob\glob.js:159:12)
JoshuaKGoldberg commented 6 years ago

Oh whoops, wrong repo!