flutter-testing
Use when defining automated testing strategies, organizing test pyramids, or establishing test naming conventions across Flutter apps.
Skill by dhruvanbhalara
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/dhruvanbhalara-flutter-testing
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: testing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 26, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/flutter-testing
What's inside
- Skill name
flutter-testing- Description
- Use when defining automated testing strategies, organizing test pyramids, or establishing test naming conventions across Flutter apps.
- License
- MIT
- Metadata
- category: testing · languages: dart · platforms: flutter
- Instructions
- 69 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Testing Strategy
- **Test Pyramid**: More unit and widget tests, fewer integration tests. Unit tests are fastest and cheapest.
- **Mirror Test Rule**: 100% logic and widget coverage. No code without a test.
- **Mirror Organization**: Test files MUST strictly mirror the `lib/` directory structure and end with `_test.dart`.
- **Coverage Targets**: Target 100% logic coverage for `domain` and `bloc` layers.
- **Test Independence**: Each test MUST be independent. No shared mutable state between tests.
# Test Types Overview
| Type | Scope | Speed | Skill |
|---|---|---|---|
| **Unit** | Single function/class | Fast | `dart-testing` |
| **Widget** | Single UI component | Medium | `flutter-add-widget-test` |
| **Integration** | Full app / user flow | Slow | `flutter-add-integration-test` |
# Pattern-Based Testing
These three patterns cut repetitive test setup, cover all visual states, and keep widget behavior consistent. They're conventions, not packages.
## Golden Variant Testing
When a widget has multiple visual states (primary, disabled, hover, error), test all variants in a single structured `group()` with a `Map<String, Widget Function()>`:
- Define a `variants` map where keys are state names and values are widget builders.
- Each variant MUST be rendered in isolation (fresh `pumpWidget` call per variant).
- Use deterministic golden file naming: `goldens/<component>.<variant>.png`.
- Set a consistent `surfaceSize` via `tester.view.physicalSize` to avoid flaky pixel diffs.
- **When to use**: Design system components, widgets with distinct modes/types.
- **When NOT to use**: Integration tests or animation frame verification.
## State Matrix Testing
Every stateful widget MUST be tested against ALL possible UI states. Use a state matrix to separate setup from verification:
- Define a `states` map with every state the widget can render (`loading`, `error`, `data`, `empty`).
- Write a single `verify(stateName)` callback that asserts correct rendering per state using `switch` expressions.
- This pattern prevents the common mistake of only testing the "happy path".
- **When to use**: Widgets with complex state machines (e.g., BLoC-driven screens).
- **When NOT to use**: If verification logic varies wildly between states, write separate tests.
## Interaction Contract Testing
Reusable widgets have implicit behavioral rules. Define these as explicit, reusable contracts:
- Create helper functions in `test/utils/` for common contracts:
- `verifyTappable(tester, finder, mockCallback)`: Tap fires callback exactly once.
- `verifyDisabledNotTappable(tester, finder, mockCallback)`: Tap does NOT fire callback when disabled.
- `verifyValidatesOnBlur(tester, finder)`: Validation triggers when focus leaves.
- Apply contracts consistently across all widgets sharing the same behavior.
- **When to use**: Widgets with strictly defined behavioral rules that must hold across refactors.
- **When NOT to use**: One-off logic unique to a single widget.
# Test Naming & Structure
- **Test Naming**: Use string interpolation for test group names: `group('$ClassName',` not `group('ClassName',`. This ensures consistency and enables better tooling support.
- **Test Grouping**: Use `group()` to organize tests by feature, class, or state for clearer reporting.
- **Descriptive Names**: Test names should clearly describe what is being tested and why.
# Common Test Errors
- `A RenderFlex overflowed...`: Wrap widget in `Expanded` or constrain dimensions in test
- `Vertical viewport was given unbounded height`: Wrap `ListView` in `SizedBox` with fixed height in test
- `setState called during build`: Defer state changes to post-frame callback
- `No MediaQuery widget ancestor`: Always wrap test widget in `MaterialApp`
# Running Tests (Quick Reference)
- `flutter test`: Run all unit and widget tests
- `flutter test test/path/to/file_test.dart`: Run specific test file
- `flutter test integration_test/`: Run integration tests
- `flutter test --coverage`: Run with coverage report
- `dart test`: Pure Dart unit testsFrom dhruvanbhalara/skills, MIT.
More from dhruvanbhalara/skills
- 0.611score
dart-fix-runtime-errors
dhruvanbhalara
Use when diagnosing runtime failures, type cast errors, null check violations, or unhandled asynchronous exceptions in Dart.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
dart-build-cli-app
dhruvanbhalara
Use when creating Dart command-line tools, parsing CLI arguments with args, handling exit codes, or managing child processes.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
dart-logic-patterns
dhruvanbhalara
Use when organizing business logic, implementing algorithmic workflows, or applying Dart data structures and pattern matching.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
dart-memory
dhruvanbhalara
Use when troubleshooting memory leaks, optimizing garbage collection overhead, or disposing streams and listeners in Dart.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
flutter-add-widget-preview
dhruvanbhalara
Use when configuring widget previews in Flutter development, testing visual component variations, or isolating widget UI states.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
flutter-apply-architecture-best-practices
dhruvanbhalara
Use when structuring Flutter application layers across data, domain, and presentation using Clean Architecture and BLoC.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
flutter-bloc
dhruvanbhalara
Use when implementing state management with sealed BLoC classes, registering dependency injection with injectable, or setting up GoRouter listeners.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
flutter-bloc-forms
dhruvanbhalara
Use when managing complex form state, synchronous and asynchronous input validation, or form submission transitions in BLoC.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
flutter-config
dhruvanbhalara
Use when configuring build flavors, passing environment variables via dart-define-from-file, or setting up stage-specific credentials.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
flutter-debugging
dhruvanbhalara
Use when diagnosing Flutter layout issues, inspecting widget rebuilds, setting breakpoints, or tracking down UI rendering anomalies.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
flutter-devtools
dhruvanbhalara
Use when profiling CPU performance, tracking memory leaks, inspecting widget trees, or viewing network traffic in Flutter DevTools.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
flutter-dio
dhruvanbhalara
Use when configuring HTTP network clients with Dio, adding auth token interceptors, handling retry logic, or caching API responses.
SkillBFreshness: B★ 30Claude Code +9
Signals
- Stars
- 30
- Forks
- 4
- Open issues
- 0
- Last commit (this folder)
- Aug 29, 2026 (2 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/dhruvanbhalara/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from dhruvanbhalara
- 0.611score
dart-fix-runtime-errors
dhruvanbhalara
Use when diagnosing runtime failures, type cast errors, null check violations, or unhandled asynchronous exceptions in Dart.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
dart-build-cli-app
dhruvanbhalara
Use when creating Dart command-line tools, parsing CLI arguments with args, handling exit codes, or managing child processes.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
dart-logic-patterns
dhruvanbhalara
Use when organizing business logic, implementing algorithmic workflows, or applying Dart data structures and pattern matching.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
dart-memory
dhruvanbhalara
Use when troubleshooting memory leaks, optimizing garbage collection overhead, or disposing streams and listeners in Dart.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
flutter-add-widget-preview
dhruvanbhalara
Use when configuring widget previews in Flutter development, testing visual component variations, or isolating widget UI states.
SkillBFreshness: B★ 30Claude Code +9 - 0.611score
flutter-apply-architecture-best-practices
dhruvanbhalara
Use when structuring Flutter application layers across data, domain, and presentation using Clean Architecture and BLoC.
SkillBFreshness: B★ 30Claude Code +9
Cite this page
flutter-testing skill. Agent Mart. https://agentmart.dev/skills/dhruvanbhalara-flutter-testing (last updated 2026-10-24)