Przejdź do treści
Biblioteka skilli
Programowanie · Testowanie

flutter-testing

/flutter-testing

Układa strategię testów automatycznych we Flutterze: piramidę testów i konwencje nazewnictwa dla wszystkich aplikacji.

Repozytorium
skills ↗
Licencja
MIT
Ostatnia zmiana repozytorium
30.08.2026

Ocena i bezpieczeństwo

90/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść25 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
1
Skrypty
0
Komentarze HTML
0
Adresy URL w SKILL.md
0
Przestarzałość

Brak sygnałów. Repozytorium zmienione 30.08.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co robi i kiedy

Układa strategię testów automatycznych we Flutterze: piramidę testów i konwencje nazewnictwa dla wszystkich aplikacji.

Oryginalny opis (EN)

Use when defining automated testing strategies, organizing test pyramids, or establishing test naming conventions across Flutter apps.

Jak działa

  1. Golden Variant Testing
  2. State Matrix Testing
  3. Interaction Contract Testing
Sekcje z nagłówków SKILL.md, w oryginale · 69 linii, 585 słów
Podgląd SKILL.md
---
name: flutter-testing
description: Use when defining automated testing strategies, organizing test pyramids, or establishing test naming conventions across Flutter apps.
metadata:
    platforms: "flutter"
    languages: "dart"
    category: "testing"
---

# 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 tests

Wersje

RepozytoriumWynikLicencja
Ta strona · dhruvanbhalara/skills90MIT
HoangNguyen0403/agent-skills-standard100MIT
testland/qa100MIT
thiennc-tesoglobal/flutter-skills100BSD-3-Clause
ethiel97/flutter-clean-riverpod-skills100MIT
jyotiraditya-chauhan/test-kit100MIT
madteacher/mad-agents-skills100MIT

Migawka bazy z 28.10.2026 · wersja paczki 1ea1c414a931 (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 95testing-flutter
    Pomaga pisać testy i strategię testowania aplikacji Flutter 3.47 z BLoC v9 i Riverpod 3.
  • 95qa-strategy
    Projektuje strategię testów: piramidę testów, architekturę E2E, wydajność i proces triage błędów.
  • 100flutter-testing-apps
    Implementuje testy jednostkowe, widgetów i integracyjne aplikacji Flutter, by zapewnić jakość kodu i zapobiegać regresjom.
  • 80alpha-core:testing-patterns
    Układa strategię testów: piramidę testów, TDD i BDD, mockowanie, dane testowe, testy migawkowe i mutacyjne.
  • 85flutter-core:flutter-testing-quality
    Pisze testy aplikacji Flutter: jednostkowe, widgetów, integracyjne i golden, z mockami, pokryciem i profilowaniem w DevTools.
  • 100eng-testing
    Prowadzi przy pisaniu testów, projektowaniu strategii testów i przeglądzie pokrycia: piramidę testów, nazewnictwo, mockowanie i politykę testów niestabilnych.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.