Agent Skills by ALSEL
Anthropic Claudeデザイン・クリエイティブ⭐ リポ 0品質スコア 50/100

flutter-add-integration-test

Flutter Driverを設定してアプリ操作を可能にし、MCPアクションを永続的なインテグレーションテストに変換します。プロジェクトへのインテグレーションテスト追加、MCP経由でのUIコンポーネント探索、またはintegration_testパッケージを使ったユーザーフローの自動化を行う際に使用します。

description の原文を見る

Configures Flutter Driver for app interaction and converts MCP actions into permanent integration tests. Use when adding integration testing to a project, exploring UI components via MCP, or automating user flows with the integration_test package.

SKILL.md 本文

Flutter インテグレーションテストの実装

目次

プロジェクトのセットアップと依存関係

インテグレーションテストと Flutter Driver 拡張をサポートするようプロジェクトを構成します。

  1. 必要な開発依存関係を pubspec.yaml に追加します:
    flutter pub add 'dev:integration_test:{"sdk":"flutter"}'
    flutter pub add 'dev:flutter_test:{"sdk":"flutter"}'
    
  2. アプリケーションのエントリーポイント (通常は lib/main.dart または専用の lib/main_test.dart) で Flutter Driver 拡張を有効にします:
    • package:flutter_driver/driver_extension.dart をインポートします。
    • runApp() の前に enableFlutterDriverExtension(); を呼び出します。
  3. アプリケーションコード内の重要なウィジェットに Key パラメーター (例: ValueKey('login_button')) を追加して、テスト中に確実にターゲットできるようにします。

MCP を介したインタラクティブな探索

Dart/Flutter MCP サーバーのツールを使用して、静的テストを作成する前にアプリケーションの状態をインタラクティブに探索および操作します。

  • 起動: launch_apptarget: "lib/main_test.dart" で実行してアプリケーションを起動し、DTD URI を取得します。
  • 検査: get_widget_tree を実行して、利用可能な KeyText ノード、ウィジェット Type を発見します。
  • 操作: tapenter_textscroll を実行してユーザーフローをシミュレートします。
  • 待機: ナビゲーション中またはアニメーションをトリガーするときは、常に waitFor を実行するか、get_health で状態を確認します。
  • マウント解除されたウィジェットのトラブルシューティング: ウィジェットがツリーに見つからない場合、SliverList または ListView で遅延ロードされている可能性があります。scroll または scrollIntoView を実行してウィジェットを強制的にマウントしてから操作します。

テスト作成ガイドライン

flutter_test API パラダイムを使用してインテグレーションテストを構成します。

  • プロジェクトルートに専用の integration_test/ ディレクトリを作成します。
  • すべてのテストファイルに <name>_test.dart 命名規則を使用してください。
  • main() の開始時に IntegrationTestWidgetsFlutterBinding.ensureInitialized(); を呼び出してバインディングを初期化します。
  • await tester.pumpWidget(MyApp()); を使用してアプリケーション UI をロードします。
  • tester.tap() などのインタラクション後に await tester.pumpAndSettle(); を使用してフレームをトリガーし、アニメーションの完了を待機します。
  • expect(find.byKey(ValueKey('foo')), findsOneWidget); または findsNothing を使用してウィジェットの表示を確認します。
  • await tester.scrollUntilVisible(itemFinder, 500.0, scrollable: listFinder); を使用して、特定の画面外のウィジェットまでスクロールします。

レガシー flutter_driver の条件付きロジック:

  • レガシー flutter_driver テストを保守または移行する場合は、WidgetTester API の代わりに driver.waitFor()driver.waitForAbsent()driver.tap()driver.scroll() を使用します。

実行とプロファイリング

flutter drive コマンドを使用してテストを実行します。test_driver/integration_test.dart に配置されたホストドライバースクリプトが integrationDriver() を呼び出す必要があります。

条件付き実行ターゲット:

  • Chrome でテストする場合: 別のターミナルで chromedriver --port=4444 を起動してから、実行します: flutter drive --driver=test_driver/integration_test.dart --target=integration_test/app_test.dart -d chrome
  • ヘッドレス Web でテストする場合: -d web-server で実行します。
  • Android (ローカル) でテストする場合: flutter drive --driver=test_driver/integration_test.dart --target=integration_test/app_test.dart を実行します。
  • Firebase Test Lab (Android) でテストする場合:
    1. デバッグ APK をビルドします: flutter build apk --debug
    2. テスト APK をビルドします: ./gradlew app:assembleAndroidTest
    3. 両方の APK を Firebase Test Lab コンソールにアップロードします。

ワークフロー: エンドツーエンドインテグレーションテスト

このチェックリストをコピーして、インテグレーションテストを実装および検証します。

  • タスク進捗: セットアップ
    • integration_testflutter_testpubspec.yaml に追加します。
    • enableFlutterDriverExtension() をアプリエントリーポイントに挿入します。
    • ターゲットウィジェットに ValueKey を割り当てます。
  • タスク進捗: 探索
    • MCP 経由で launch_app を実行します。
    • get_widget_tree を使用してウィジェットツリーをマッピングします。
    • MCP ツール (tap, enter_text) を使用してインタラクションパスを検証します。
  • タスク進捗: 作成
    • integration_test/app_test.dart を作成します。
    • WidgetTester API を使用してテストケースを記述します。
    • integrationDriver() を含む test_driver/integration_test.dart を作成します。
  • タスク進捗: 実行とフィードバックループ
    • flutter drive --driver=test_driver/integration_test.dart --target=integration_test/app_test.dart を実行します。
    • フィードバックループ: テスト出力を確認 → PumpAndSettleTimedOutException が発生する場合は、無限アニメーションを確認 → ウィジェットが見つからない場合は scrollUntilVisible を追加 → テストが成功するまで再実行します。

標準インテグレーションテスト (integration_test/app_test.dart)

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:my_app/main.dart';

void main() {
  IntegrationTestWidgetsFlutterBinding.ensureInitialized();

  group('End-to-end test', () {
    testWidgets('tap on the floating action button, verify counter', (tester) async {
      // Load app widget.
      await tester.pumpWidget(const MyApp());

      // Verify the counter starts at 0.
      expect(find.text('0'), findsOneWidget);

      // Find the floating action button to tap on.
      final fab = find.byKey(const ValueKey('increment'));

      // Emulate a tap on the floating action button.
      await tester.tap(fab);

      // Trigger a frame and wait for animations.
      await tester.pumpAndSettle();

      // Verify the counter increments by 1.
      expect(find.text('1'), findsOneWidget);
    });
  });
}

ホストドライバースクリプト (test_driver/integration_test.dart)

import 'package:integration_test/integration_test_driver.dart';

Future<void> main() => integrationDriver();

パフォーマンスプロファイリングドライバースクリプト (test_driver/perf_driver.dart)

テストアクションを binding.traceAction() でラップしてパフォーマンスメトリクスをキャプチャする場合は、このドライバースクリプトを使用します。

import 'package:flutter_driver/flutter_driver.dart' as driver;
import 'package:integration_test/integration_test_driver.dart';

Future<void> main() {
  return integrationDriver(
    responseDataCallback: (data) async {
      if (data != null) {
        final timeline = driver.Timeline.fromJson(
          data['scrolling_timeline'] as Map<String, dynamic>,
        );

        final summary = driver.TimelineSummary.summarize(timeline);

        await summary.writeTimelineToFile(
          'scrolling_timeline',
          pretty: true,
          includeSummary: true,
        );
      }
    },
  );
}

ライセンス: BSD-3-Clause(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
flutter
リポジトリ
flutter/skills
ライセンス
BSD-3-Clause
最終更新
不明

Source: https://github.com/flutter/skills / ライセンス: BSD-3-Clause

関連スキル

汎用デザイン・クリエイティブ⭐ リポ 1,739

nano-banana-2

inference.sh CLIを通じてGoogle Gemini 3.1 Flash Image Preview(Nano Banana 2)で画像を生成します。テキストから画像を生成する機能、画像編集、最大14枚の複数画像入力、Google Searchグラウンディング機能に対応しています。トリガーワード:「nano banana 2」「nanobanana 2」「gemini 3.1 flash image」「gemini 3 1 flash image preview」「google image generation」

by openakita
汎用デザイン・クリエイティブ⭐ リポ 815

octocode-slides

洗練されたマルチファイル形式のHTMLプレゼンテーションを生成します。6段階のフロー(概要 → リサーチ → アウトライン → デザイン → 実装 → レビュー)で構成されています。各スライドは独立したHTMLファイルとなり、iframeで読み込まれます。「スライドを作成してほしい」「プレゼンテーションを作ってほしい」「HTMLスライドを生成してほしい」「デックを構築してほしい」といった依頼や、ノート・ドキュメント・コードを洗練されたプレゼンテーションに変換する際に使用できます。

by bgauryy
汎用デザイン・クリエイティブ⭐ リポ 482

gpt-image2-ppt

OpenAIのgpt-image-2を使用して、視覚的に優れたPPTスライドを生成します。Spatial Glass、Tech Blue、Editorial Monoなど10種類のキュレーション済みスタイルに対応し、ユーザーが提供したPPTXファイルを模倣するテンプレートクローンモードも搭載しています。HTMLビューアと16:9形式のPPTXファイルを出力します。プレゼンテーション、スライド、ピッチデック、投資家向けPPT、雑誌風PPTの作成依頼などで活用してください。

by JuneYaooo
Anthropic Claudeデザイン・クリエイティブ⭐ リポ 299

nano-banana

Nano Banana PRO(Gemini 3 Pro Image)およびNano Banana(Gemini 2.5 Flash Image)を使用したAI画像生成機能です。以下の場合に活用できます:(1)テキストプロンプトからの画像生成、(2)既存画像の編集、(3)インフォグラフィックス、ロゴ、商品写真、ステッカーなどのプロフェッショナルなビジュアルアセット制作、(4)複数画像での人物キャラクターの一貫性保持、(5)正確なテキスト描画を含む画像生成、(6)AI生成ビジュアルが必要なあらゆるタスク。「画像を生成」「画像を作成」「写真を作る」「ロゴをデザイン」「インフォグラフィックスを作成」「AI画像」「nano banana」またはその他の画像生成リクエストをトリガーとして機能します。

by majiayu000
Anthropic Claudeデザイン・クリエイティブ⭐ リポ 299

oiloil-ui-ux-guide

モダンでクリーンなUI/UXガイダンス・レビュースキルです。新機能や既存システム(Webアプリ)に対して、実行可能なUI/UX改善提案、デザイン原則、デザインレビューチェックリストが必要な場合に活用できます。CRAP(コントラスト・反復・配置・近接)をベースに、タスクファーストなUX、情報設計、フィードバック・システムステータス、一貫性、affordances、エラー防止・復旧、認知負荷を重視します。モダンミニマルスタイル(クリーン・余白・タイポグラフィ主導)を強制し、不要なテキストを削減、アイコンとしての絵文字を禁止し、統一されたアイコンセットから直感的で洗練されたアイコンを推奨します。

by majiayu000
Anthropic Claudeデザイン・クリエイティブ⭐ リポ 299

axiom-hig-ref

Apple Human Interface Guidelines リファレンス — 色(セマンティックカラー、カスタムカラー、パターン)、背景(マテリアル階層、ダイナミック背景)、タイポグラフィ(標準スタイル、カスタムフォント、Dynamic Type)、SF Symbols(レンダリングモード、色、多言語対応)、ダークモード、アクセシビリティ、プラットフォーム固有の考慮事項を網羅したガイドラインです。

by majiayu000
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: flutter · flutter/skills · ライセンス: BSD-3-Clause