skills/dart/dart-collect-coverage/SKILL.md
Collect test coverage, generate LCOV/HTML reports, and apply coverage ignore directives. Use when measuring test coverage, setting up coverage gates in CI, or generating coverage reports for Dart and Flutter projects.
npx skillsauth add dhruvanbhalara/skills dart-collect-coverageInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Add coverage strictly as a dev_dependency:
Dart project:
dart pub add dev:coverage
Flutter project:
flutter pub add dev:coverage
Use the bundled test_with_coverage script for one-command coverage:
dart run coverage:test_with_coverage
This automatically:
coverage/lcov.infoMonorepo support — specify test directories explicitly:
dart run coverage:test_with_coverage -- pkgs/foo/test pkgs/bar/test
flutter test --coverage
Outputs coverage/lcov.info at project root.
# Install lcov (macOS)
brew install lcov
# Generate HTML from LCOV
genhtml coverage/lcov.info -o coverage/html
# Open in browser
open coverage/html/index.html
lcov --remove coverage/lcov.info \
'*.g.dart' \
'*.freezed.dart' \
'*.part.dart' \
-o coverage/lcov_cleaned.info
For granular control over coverage collection (branch/function-level):
dart run --pause-isolates-on-exit \
--disable-service-auth-codes \
--enable-vm-service=8181 \
test &
dart run coverage:collect_coverage \
--wait-paused \
--uri=http://127.0.0.1:8181/ \
-o coverage/coverage.json \
--resume-isolates \
--function-coverage \
--branch-coverage
Optional flags:
--function-coverage — function-level metrics (Dart VM 2.17.0+)--branch-coverage — branch-level metrics (Dart VM 2.17.0+)dart run coverage:format_coverage \
--packages=.dart_tool/package_config.json \
--lcov \
-i coverage/coverage.json \
-o coverage/lcov.info \
--check-ignore
Exclude specific code from coverage metrics using inline comments. Pass --check-ignore during formatting to enforce.
| Directive | Scope | Usage |
|---|---|---|
| // coverage:ignore-line | Single line | Unreachable branches, platform checks |
| // coverage:ignore-start / // coverage:ignore-end | Block | Generated code, legacy methods |
| // coverage:ignore-file | Entire file | Generated files, config files |
// coverage:ignore-file
// This entire file is excluded from coverage
class GeneratedRoutes {
// coverage:ignore-start
void legacyInit() {
print('Deprecated initialization');
}
// coverage:ignore-end
bool isProduction(String env) {
if (env == 'prod') return true;
return false; // coverage:ignore-line
}
}
- name: Run tests with coverage
run: flutter test --coverage
- name: Check coverage threshold
run: |
COVERAGE=$(lcov --summary coverage/lcov.info 2>&1 | grep "lines" | awk '{print $2}' | sed 's/%//')
echo "Coverage: $COVERAGE%"
if (( $(echo "$COVERAGE < 80" | bc -l) )); then
echo "Coverage below 80% threshold!"
exit 1
fi
- name: Upload coverage
uses: codecov/codecov-action@v4
with:
files: coverage/lcov.info
domain and bloc layers.// coverage:ignore-file for generated code (.g.dart, .freezed.dart).coverage to dev_dependencies.flutter test --coverage (or dart run coverage:test_with_coverage).coverage/lcov.info exists.lcov --remove ... '*.g.dart' '*.freezed.dart'.genhtml coverage/lcov.info -o coverage/html.// coverage:ignore-file.name: my_app
environment:
sdk: ^3.0.0
dev_dependencies:
flutter_test:
sdk: flutter
coverage: ^1.15.0
bloc_test: ^9.1.0
mocktail: ^1.0.0
#!/bin/bash
# scripts/coverage.sh
set -e
echo "Running tests with coverage..."
flutter test --coverage
echo "Filtering generated code..."
lcov --remove coverage/lcov.info \
'*.g.dart' '*.freezed.dart' '*.part.dart' \
-o coverage/lcov_cleaned.info
echo "Generating HTML report..."
genhtml coverage/lcov_cleaned.info -o coverage/html
echo "Opening report..."
open coverage/html/index.html
development
Perform REST API networking operations (GET, POST, PUT, DELETE) using the lightweight and robust standard `http` package, including platform configurations and background parsing models.
development
Configure internationalization and localization support using Flutter's built-in l10n system, App Resource Bundle (ARB) files, and ICU formatting syntax.
development
Create model classes with fromJson/toJson using dart:convert and Dart 3 pattern matching. Use when manually mapping JSON to classes, parsing HTTP responses, or choosing between manual and code-generated serialization.
data-ai
Diagnose and fix Flutter layout constraint violations (RenderFlex overflow, unbounded height/width, ParentData misuse). Use when encountering layout exceptions, yellow-black overflow stripes, or red error screens.