diff --git a/crates/forge/src/cmd/coverage.rs b/crates/forge/src/cmd/coverage.rs
index 3b2e04eb88b26..729f96e5a9838 100644
--- a/crates/forge/src/cmd/coverage.rs
+++ b/crates/forge/src/cmd/coverage.rs
@@ -75,6 +75,10 @@ pub struct CoverageArgs {
     #[arg(long)]
     include_libs: bool,
 
+    /// Whether to exclude tests from the coverage report.
+    #[arg(long)]
+    exclude_tests: bool,
+
     /// The coverage reporters to use. Constructed from the other fields.
     #[arg(skip)]
     reporters: Vec<Box<dyn CoverageReporter>>,
@@ -194,8 +198,10 @@ impl CoverageArgs {
         for (path, source_file, version) in output.output().sources.sources_with_version() {
             report.add_source(version.clone(), source_file.id as usize, path.clone());
 
-            // Filter out dependencies.
-            if !self.include_libs && project_paths.has_library_ancestor(path) {
+            // Filter out libs dependencies and tests.
+            if (!self.include_libs && project_paths.has_library_ancestor(path)) ||
+                (self.exclude_tests && project_paths.is_test(path))
+            {
                 continue;
             }