Flutter testing
Skill ComeOnOliver/skillshub/skills/HoangNguyen0403/agent-skills-standard/flutter-testing
🧠The right skill, one API call. AI agent skills registry with token-efficient skill resolution. 5,000+ skills from 500+ top repos.
npx -y skills add ComeOnOliver/skillshub --skill flutter-testingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
Unit, widget, and integration testing with robots, widget keys, and Patrol. Use when writing Flutter unit tests, widget tests, or integration tests with Patrol. (triggers: **/test/**.dart, **/integration_test/**.dart, **/robots/**.dart, lib/core/keys/**.dart, test, patrol, robot, WidgetKeys, patrolTest, blocTest, mocktail)
SKILL.md
2.7 KB, 624 tokens by cl100k_base, as published. Nobody here has run it
Flutter Testing Standards
Priority: P0 (CRITICAL)
Core Rules
- Test Pyramid: Unit > Widget > Integration.
- Naming:
should <behavior> when <condition>. - AAA: Arrange, Act, Assert in all tests.
- Shared Mocks:
test/shared/only — no local mocks. - File Placement:
_integration_test.dartONLY inintegration_test/. - Robot-First: ALL UI assertions/interactions via Robot pattern (e.g.,
CheckoutRobot) — never rawfind.*/expect()in test body.
Widget Testing & Mocking
- Setup: Use
TestWrapper.init()insetUpAllandtester.pumpLocalizedWidget(...). - Mocking: Use GetIt registration of Mock BLoCs in
setUpAllif created internally. Use blocTest for BLoC logic and whenListen for state transitions. - Stubbing: Always stub bloc.state and bloc.stream in
setUp. Prohibitany()/anyNamed(). - Async: Use settle: false for loading or stream states to verify mid-process transitions.
Robot Pattern
- All interactions and assertions belong in
*Robot(e.g.,expectFirstOrderVisible()). - Symmetric: every
expectXxxVisible()needs expectXxxNotVisible() pairs. - Widget tests: include a
pumpScreen(bloc:, settle:)helper. - Widget Keys: Use WidgetKeys constants from
lib/core/keys/— never inlineKey('string').
Integration Testing
- Use patrolTest with IntegrationAuthHelper.loginOrSkip($) for authenticated flows.
- Use $.native.tap() or
$.native.*for native interactions (e.g., system dialogs). - Create a robot:
final robot = OrdersRobot($.tester)— share the same class as widget tests. - Only
$.native.*and navigation helpers may remain inline in the test body.
Anti-Patterns
- No inline Key: Use
WidgetKeysconstant. Noany(): Use typed matchers. - No local mocks: Use
test/shared/. No missing bloc stub: Stubstate+stream. - No test-body logic: Move
find.*/expect()to robot. No raw find in integration tests. - No
_integration_test.dartintest/: Rename or merge. - No unused imports: Remove
v_dlswhen robots handle assertions. Check Material import needs. - No happy-path-only: Add
Edge casesgroup. No one-sided assertions: AddexpectNotVisiblepairs. - No unchecked text casing: Verify
.toUpperCase(),.tr()in source.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.