<

ウィジェットを探す

テスト環境でウィジェットを見つけるには、Finderクラス。自分で書くことも可能ですが、Finderクラス、 一般に、ツールを使用してウィジェットを見つける方が便利です によって提供されるflutter_testパッケージ。

中にflutter runウィジェット テストのセッションでは、次のこともできます Flutter ツールの画面の一部を対話的にタップすると、 提案されたものを印刷するFinder

このレシピで見ているのは、findによって提供される定数 のflutter_testパッケージを作成し、その方法を示します の一部と協力するFindersそれは提供します。 利用可能なファインダーの完全なリストについては、 を参照してくださいCommonFindersドキュメンテーション。

ウィジェットのテストとその役割に慣れていない場合は、Finderクラス、 を見直すウィジェットのテストの概要レシピ。

このレシピでは次の手順を使用します。

  1. を見つけるTextウィジェット。
  2. 特定のウィジェットを見つけるKey
  3. 特定のウィジェット インスタンスを見つけます。

1. を見つけますTextウィジェット

テストでは、多くの場合、特定のテキストを含むウィジェットを検索する必要があります。 これはまさに、0cb36aa0-e540-4285-a7e5-66bf68b​​7386dのメソッドです。それは、Finder特定のウィジェットを表示するウィジェットを検索しますStringテキストの。

testWidgets('finds a Text widget', (tester) async {
  // Build an App with a Text widget that displays the letter 'H'.
  await tester.pumpWidget(const MaterialApp(
    home: Scaffold(
      body: Text('H'),
    ),
  ));

  // Find a widget that displays the letter 'H'.
  expect(find.text('H'), findsOneWidget);
});

2. 特定のウィジェットを見つけるKey

場合によっては、以前に作成されたキーに基づいてウィジェットを見つけたい場合があります。 それに提供されます。これは、 同じウィジェット。たとえば、ListView複数表示される場合がありますText同じテキストを含むウィジェット。

この場合、Keyリスト内の各ウィジェットに。これにより、 特定のウィジェットを一意に識別し、見つけやすくするアプリ テスト環境のウィジェット。

testWidgets('finds a widget using a Key', (tester) async {
  // Define the test key.
  const testKey = Key('K');

  // Build a MaterialApp with the testKey.
  await tester.pumpWidget(MaterialApp(key: testKey, home: Container()));

  // Find the MaterialApp widget using the testKey.
  expect(find.byKey(testKey), findsOneWidget);
});

3. 特定のウィジェット インスタンスを見つける

最後に、ウィジェットの特定のインスタンスを見つけることに興味があるかもしれません。 たとえば、これは、childプロパティをレンダリングしていることを確認したい場合は、childウィジェット。

testWidgets('finds a specific instance', (tester) async {
  const childWidget = Padding(padding: EdgeInsets.zero);

  // Provide the childWidget to the Container.
  await tester.pumpWidget(Container(child: childWidget));

  // Search for the childWidget in the tree and verify it exists.
  expect(find.byWidget(childWidget), findsOneWidget);
});

まとめ

findによって提供される定数flutter_testパッケージが提供する テスト環境でウィジェットを見つける方法はいくつかあります。このレシピ これらの方法のうち 3 つを実証しましたが、さらにいくつかの方法が存在します さまざまな目的のために。

上記の例が特定のユースケースで機能しない場合は、 を見てくださいCommonFindersドキュメンテーション利用可能なすべての方法を確認します。

完全な例

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  testWidgets('finds a Text widget', (tester) async {
    // Build an App with a Text widget that displays the letter 'H'.
    await tester.pumpWidget(const MaterialApp(
      home: Scaffold(
        body: Text('H'),
      ),
    ));

    // Find a widget that displays the letter 'H'.
    expect(find.text('H'), findsOneWidget);
  });

  testWidgets('finds a widget using a Key', (tester) async {
    // Define the test key.
    const testKey = Key('K');

    // Build a MaterialApp with the testKey.
    await tester.pumpWidget(MaterialApp(key: testKey, home: Container()));

    // Find the MaterialApp widget using the testKey.
    expect(find.byKey(testKey), findsOneWidget);
  });

  testWidgets('finds a specific instance', (tester) async {
    const childWidget = Padding(padding: EdgeInsets.zero);

    // Provide the childWidget to the Container.
    await tester.pumpWidget(Container(child: childWidget));

    // Search for the childWidget in the tree and verify it exists.
    expect(find.byWidget(childWidget), findsOneWidget);
  });
}