Skip to content

Commit d5d0a63

Browse files
fix(coverage): make coverage analyze fail when tests fail
The coverage analyze command now properly propagates test failures while still generating the coverage report. Previously, it would ignore test failures and return success if the coverage report was generated successfully. Behavior: - Always generate the coverage report (useful for debugging) - Propagate the test result exit code (2 for test failures) - Only return an error if the coverage report itself fails Includes a regression test with a failing test case to prevent future regressions.
1 parent 907d9ff commit d5d0a63

2 files changed

Lines changed: 5 additions & 6 deletions

File tree

crates/moon/src/cli/coverage.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use clap::Parser;
2525
use moonutil::dirs::PackageDirs;
2626
use walkdir::WalkDir;
2727

28-
use super::{TestSubcommand, UniversalFlags, run_test};
28+
use super::{run_test, TestSubcommand, UniversalFlags};
2929

3030
#[derive(Debug, clap::Parser, Default)]
3131
#[clap(
@@ -102,17 +102,15 @@ fn run_coverage_analyze(
102102
test_flags,
103103
)?;
104104

105-
if test_result != 0 {
106-
return Ok(test_result);
107-
}
108-
109105
let mut report_flags = CoverageReportSubcommand::default();
110106
report_flags.args.push("-f=simp_caret".into());
111107
if let Some(package) = &args.package {
112108
report_flags.args.push(format!("-p={package}"));
113109
}
114110
report_flags.args.extend(args.extra_flags);
115-
run_coverage_report(cli, report_flags)
111+
let _ = run_coverage_report(cli, report_flags)?;
112+
113+
Ok(test_result)
116114
}
117115

118116
fn run_coverage_clean(cli: UniversalFlags) -> Result<i32, anyhow::Error> {

crates/moon/tests/test_cases/moon_coverage.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,4 +137,5 @@ fn test_moon_coverage_analyze_fails_on_test_failure() {
137137
.failure();
138138
let stdout = String::from_utf8(output.get_output().stdout.to_owned()).unwrap();
139139
assert!(stdout.contains("Total tests") && stdout.contains("failed"));
140+
assert!(stdout.contains("All source files are fully covered"));
140141
}

0 commit comments

Comments
 (0)