dart-collect-coverage — Claude Code skill: how to install
Collects Dart and Flutter test coverage metrics with the coverage package and generates LCOV reports. Handy for test auditing and CI pipeline preparation.
npx skills add dart-lang/skills --skill dart-collect-coverage -a claude-codeWhat dart-collect-coverage does
This skill guides coverage collection for Dart and Flutter applications. It installs the coverage package under dev_dependencies using dart pub add or flutter pub add, then executes coverage:test_with_coverage. The automated script runs the test suite, captures JSON from the Dart VM, and produces coverage/lcov.info. In workspace monorepos, target directories can be passed explicitly.
For isolate control, the skill outlines a manual collection workflow. Tests run with --pause-isolates-on-exit while exposing the VM service on port 8181. Next, coverage:collect_coverage pulls data from the running VM, and coverage:format_coverage converts JSON into LCOV. Capturing function and branch metrics requires Dart VM 2.17.0 or newer.
Untestable lines or files can be skipped using inline directives like // coverage:ignore-line or // coverage:ignore-file. The --check-ignore flag ensures the formatter applies these rules directly to the report.
What it helps with
- Add the coverage package to project dev_dependencies
- Run Dart and Flutter tests and generate an LCOV report
- Collect branch and function coverage through the Dart VM service
- Exclude generated code using inline coverage ignore comments
Example prompts for the agent
- Run Dart tests and generate an LCOV coverage report in coverage/lcov.info
- Configure dev:coverage dependency and execute test_with_coverage
- Collect branch coverage from the VM service on port 8181
How to install dart-collect-coverage
1Skills CLI (Vercel)
npx skills add dart-lang/skills --skill dart-collect-coverage -a claude-code2Manually: put the files in place
~/.claude/skills/dart-collect-coverage/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/dart-collect-coverage/
1Skills CLI (Vercel)
npx skills add dart-lang/skills --skill dart-collect-coverage -a codex2Manually: put the files in place
.agents/skills/dart-collect-coverage/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add dart-lang/skills --skill dart-collect-coverage -a cursor2Manually: put the files in place
.cursor/skills/dart-collect-coverage/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install dart-lang/skills dart-collect-coverage2Manually: put the files in place
.github/skills/dart-collect-coverage/SKILL.md1Skills CLI (Vercel)
npx skills add dart-lang/skills --skill dart-collect-coverage -a gemini-cli2Platform CLI
gemini skills install https://github.com/dart-lang/skills --path skills/dart-collect-coverageManually: put the files in place
.devin/skills/dart-collect-coverage/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add dart-lang/skills --skill dart-collect-coverage -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about dart-collect-coverage
How to install dart-collect-coverage in Claude Code?
Run npx skills add dart-lang/skills --skill dart-collect-coverage -a claude-code. The skill file will be placed at ~/.claude/skills/dart-collect-coverage/SKILL.md.
What does dart-collect-coverage do?
It automates executing Dart and Flutter test suites, reading VM coverage data, and exporting results as coverage/coverage.json and coverage/lcov.info.
What are the requirements for branch and function coverage?
Dart VM 2.17.0 or later is required. These metrics are gathered by adding --branch-coverage and --function-coverage to coverage:collect_coverage.
Source text
SKILL.md · BSD-3-Clause
---
name: dart-collect-coverage
description: Collect coverage using the coverage packge and create an LCOV report
metadata:
model: models/gemini-3.1-pro-preview
last_modified: Fri, 24 Apr 2026 15:14:32 GMT
---
# Implementing Dart and Flutter Test Coverage
## Contents
- [Testing Fundamentals](#testing-fundamentals)
- [Coverage Directives](#coverage-directives)
- [Workflow: Configuring and Generating Coverage Reports](#workflow-configuring-and-generating-coverage-reports)
- [Workflow: Advanced Manual Coverage Collection](#workflow-advanced-manual-coverage-collection)
- [Examples](#examples)
## Testing Fundamentals
Structure your test suites using the standard Dart testing paradigms. Use `package:test` for Dart projects and `flutter_test` for Flutter projects.
- **Unit Tests:** Verify individual functions, methods, or classes.
- **Component/Widget Tests:** Verify component behavior, layout, and interaction using mock objects (`package:mockito`).
- **Integration Tests:** Verify entire app flows on simulated or real devices.
## Coverage Directives
Exclude specific lines, blocks, or entire files from coverage metrics using inline comments. Pass the `--check-ignore` flag during formatting to enforce these directives.
- Ignore a single line: `// coverage:ignore-line`
- Ignore a block of code: `// coverage:ignore-start` and `// coverage:ignore-end`
- Ignore an entire file: `// coverage:ignore-file`
## Workflow: Configuring and Generating Coverage Reports
Follow this sequential workflow to add the coverage package, execute tests, and generate an LCOV report.
**Task Progress Checklist:**
- [ ] 1. Add `coverage` as a `dev_dependency`.
- [ ] 2. Execute the automated coverage script.
- [ ] 3. Validate the LCOV output.
### 1. Add Dependencies
Add the `coverage` package as a `dev_dependency` to your project. Do not add it to standard dependencies.
If working in a standard Dart project:
```bash
dart pub add dev:coverage
```
If working in a Flutter project:
```bash
flutter pub add dev:coverage
```
### 2. Collect Coverage and Generate LCOV
Use the bundled `test_with_coverage` script. This script automatically runs all tests, collects the JSON coverage data from the Dart VM, and formats it into an LCOV report.
```bash
dart run coverage:test_with_coverage
```
*Note: If working within a Dart workspace (monorepo), specify the test directories explicitly (e.g., `dart run coverage:test_with_coverage -- pkgs/foo/test pkgs/bar/test`).*
### 3. Feedback Loop: Validate Output
**Run validator -> review errors -> fix:**
1. Verify that the `coverage/` directory was created in the project root.
2. Ensure `coverage/coverage.json` (raw data) and `coverage/lcov.info` (formatted report) exist.
3. If coverage is missing for specific files, ensure they are imported and executed by your test files, or add `// coverage:ignore-file` if they are intentionally excluded.
## Workflow: Advanced Manual Coverage Collection
If you require granular control over the VM service, isolate pausing, or need branch/function-level coverage, use the manual collection workflow.
**Task Progress Checklist:**
- [ ] 1. Run tests with VM service enabled.
- [ ] 2. Collect raw JSON coverage.
- [ ] 3. Format JSON to LCOV.
### 1. Run Tests with VM Service
Execute tests while pausing isolates on exit and exposing the VM service on a specific port (e.g., 8181).
```bash
dart run --pause-isolates-on-exit --disable-service-auth-codes --enable-vm-service=8181 test &
```
### 2. Collect Raw Coverage
Extract the coverage data from the running VM service and output it to a JSON file.
```bash
dart run coverage:collect_coverage --wait-paused --uri=http://127.0.0.1:8181/ -o coverage/coverage.json --resume-isolates
```
*Optional: Append `--function-coverage` and `--branch-coverage` to gather deeper metrics (requires Dart VM 2.17.0+).*
### 3. Format to LCOV
Convert the raw JSON data into the standard LCOV format.
```bash
dart run coverage:format_coverage --packages=.dart_tool/package_config.json --lcov -i coverage/coverage.json -o coverage/lcov.info --check-ignore
```
## Examples
### Example: `pubspec.yaml` Configuration
Ensure your `pubspec.yaml` reflects the `coverage` package strictly under `dev_dependencies`.
```yaml
name: my_dart_app
environment:
sdk: ^3.0.0
dependencies:
path: ^1.8.0
dev_dependencies:
test: ^1.24.0
coverage: ^1.15.0
```
### Example: Applying Ignore Directives
Use ignore directives to prevent generated code or untestable edge cases from lowering coverage scores.
```dart
// coverage:ignore-file
import 'package:meta/meta.dart';
class SystemConfig {
final String env;
SystemConfig(this.env);
// coverage:ignore-start
void legacyInit() {
print('Deprecated initialization');
}
// coverage:ignore-end
bool isProduction() {
if (env == 'prod') return true;
return false; // coverage:ignore-line
}
}
```
© dart-lang · BSD-3-Clause · dart-lang/skills