From ab67b4c645dc34619e09c2f9f36c18122b11a307 Mon Sep 17 00:00:00 2001 From: Nathan Whitaker <17734409+nathanwhit@users.noreply.github.com> Date: Fri, 15 Mar 2024 20:58:57 -0700 Subject: [PATCH] fix(coverage): Error if no files are included in the report (#22952) Fixes #22941. In that case, the only file with coverage was the `test.ts` file. The coverage reporter filters out test files before compiling its report, so after filtering we were left with an empty set of files. Later on it's assumed that there is at least 1 file to be reported on, and we panic. Instead of panicking, just issue an error after filtering. --- cli/tools/coverage/mod.rs | 3 +++ .../coverage/no_files_after_filter/__test__.jsonc | 15 +++++++++++++++ .../no_files_after_filter/no_files_in_report.out | 1 + .../specs/coverage/no_files_after_filter/test.ts | 1 + .../no_files_after_filter/test_coverage.out | 6 ++++++ 5 files changed, 26 insertions(+) create mode 100644 tests/specs/coverage/no_files_after_filter/__test__.jsonc create mode 100644 tests/specs/coverage/no_files_after_filter/no_files_in_report.out create mode 100644 tests/specs/coverage/no_files_after_filter/test.ts create mode 100644 tests/specs/coverage/no_files_after_filter/test_coverage.out diff --git a/cli/tools/coverage/mod.rs b/cli/tools/coverage/mod.rs index e5bd3ae2e2..b076895700 100644 --- a/cli/tools/coverage/mod.rs +++ b/cli/tools/coverage/mod.rs @@ -485,6 +485,9 @@ pub async fn cover_files( coverage_flags.exclude, npm_resolver.as_ref(), ); + if script_coverages.is_empty() { + return Err(generic_error("No covered files included in the report")); + } let proc_coverages: Vec<_> = script_coverages .into_iter() diff --git a/tests/specs/coverage/no_files_after_filter/__test__.jsonc b/tests/specs/coverage/no_files_after_filter/__test__.jsonc new file mode 100644 index 0000000000..e8aa477a89 --- /dev/null +++ b/tests/specs/coverage/no_files_after_filter/__test__.jsonc @@ -0,0 +1,15 @@ +{ + "tempDir": true, + "steps": [ + { + "args": "test --coverage test.ts", + "output": "test_coverage.out", + "exitCode": 0 + }, + { + "args": "coverage ./coverage", + "output": "no_files_in_report.out", + "exitCode": 1 + } + ] +} diff --git a/tests/specs/coverage/no_files_after_filter/no_files_in_report.out b/tests/specs/coverage/no_files_after_filter/no_files_in_report.out new file mode 100644 index 0000000000..c9ba7af951 --- /dev/null +++ b/tests/specs/coverage/no_files_after_filter/no_files_in_report.out @@ -0,0 +1 @@ +error: No covered files included in the report diff --git a/tests/specs/coverage/no_files_after_filter/test.ts b/tests/specs/coverage/no_files_after_filter/test.ts new file mode 100644 index 0000000000..03818ae8d4 --- /dev/null +++ b/tests/specs/coverage/no_files_after_filter/test.ts @@ -0,0 +1 @@ +Deno.test("test", () => {}); diff --git a/tests/specs/coverage/no_files_after_filter/test_coverage.out b/tests/specs/coverage/no_files_after_filter/test_coverage.out new file mode 100644 index 0000000000..3c598f62e1 --- /dev/null +++ b/tests/specs/coverage/no_files_after_filter/test_coverage.out @@ -0,0 +1,6 @@ +Check [WILDCARD]/test.ts +running 1 test from ./test.ts +test ... ok ([WILDCARD]) + +ok | 1 passed | 0 failed ([WILDCARD]) +