null safety article
Contents
Find widgets
To locate widgets in a test environment, use the Finder
classes.
テスト環境でウィジェットを見つけるには、Finder
クラスを使用します。
While it’s possible to write your own Finder
classes, it’s generally more convenient to locate widgets using the tools provided by the flutter_test
package.
独自のFinder
クラスを作成することも可能ですが、通常は、flutter_test
パッケージで提供されているツールを使用してウィジェットを見つける方が便利です。
During a flutter run
session on a widget test, you can also interactively tap parts of the screen for the Flutter tool to print the suggested [Finder
].
flutter run
ウィジェットテストのセッション中に、Flutterツールの画面の一部をインタラクティブにタップして、提案された[ Finder
]を印刷することもできます。
This recipe looks at the find
constant provided by the flutter_test
package, and demonstrates how to work with some of the Finders
it provides.
このレシピではflutter_test
パッケージによって提供されるfind定数を調べ、Flutter_test
が提供するいくつかのFinder定数を操作する方法を示しています。
For a full list of available finders, see the CommonFinders
documentation.
使用可能なファインダーの完全なリストについては、CommonFinders
ドキュメントを参照してください。
If you’re unfamiliar with widget testing and the role of Finder
classes, review the Introduction to widget testing recipe.
ウィジェットテストとFinder
クラスの役割に慣れていない場合は、Introduction to widget testing recipe.を確認してください。
今回は次のステップで進めていきます。
- Textウィジェットを見つけます。
- 特定のKeyを持つウィジェットを見つけます。
- 特定のウィジェットインスタンスを見つけます。
1. Find a Text
widget
In testing, you often need to find widgets that contain specific text.
テストでは、特定のテキストを含むウィジェットを見つけることが必要な場合がよくあります。
This is exactly what the find.text()
method is for.
まさにfind.text()メソッドがその役割です。(一つ前の回で使用した。)
It creates a Finder
that searches for widgets that display a specific String
of text.
find.text()メソッドはFinderを生成し、特定のStringまたはtextを表示するウィジェットを探します。
testWidgets('finds a Text widget', (WidgetTester tester) async {
// Build an app with a Text widget that displays the letter 'H'.
//文字'H'を表示するTextウィジェットを持つアプリをビルドする。
await tester.pumpWidget(MaterialApp(
home: Scaffold(
body: Text('H'),
),
));
// Find a widget that displays the letter 'H'.
//文字'H'を表示するウィジェットを見つける。
expect(find.text('H'), findsOneWidget);
});
2. Find a widget with a specific Key
In some cases, you might want to find a widget based on the Key that has been provided to it.
場合によっては、提供されているキーに基づいてウィジェットを検索したいことがあります。
This can be handy if displaying multiple instances of the same widget.
これは、同じ(種類の)ウィジェットのインスタンスが複数ある場合に便利です。
For example, a ListView
might display several Text
widgets that contain the same text.
例えば、ListViewが、同じ文字列を含むいくつかのTextウィジェットを表示するようなケースです。
In this case, provide a Key
to each widget in the list.
この場合、リスト内の各ウィジェットにKeyを提供します。
This allows an app to uniquely identify a specific widget, making it easier to find the widget in the test environment.
これにより、アプリは特定のウィジェットを一意に識別できるようになり、テスト環境でウィジェットを簡単に見つけることができます。
testWidgets('finds a widget using a Key', (WidgetTester tester) async {
// Define the test key.
//テスト用のKeyを生成します。
final testKey = Key('K');
// Build a MaterialApp with the testKey.
//MaterialAppを構築して、testKeyを設定します。
await tester.pumpWidget(MaterialApp(key: testKey, home: Container()));
// Find the MaterialApp widget using the testKey.
//↓testKeyを持つウィジェットを検索します(結果として今回はMaterialAppが該当する)。
expect(find.byKey(testKey), findsOneWidget);
});
3. Find a specific widget instance
Finally, you might be interested in locating a specific instance of a widget.
最後に、ウィジェットの特定のインスタンスを見つけることに興味があるかもしれません。
For example, this can be useful when creating widgets that take a child
property and you want to ensure you’re rendering the child
widget.
child
プロパティを持つウィジェットを作成し、childウィジェットを確実にレンダリングする場合に役立ちます。testWidgets('finds a specific instance', (WidgetTester tester) async {
final childWidget = Padding(padding: EdgeInsets.zero);
// Provide the childWidget to the Container.
//ContainerにchildWidgetを渡します。
await tester.pumpWidget(Container(child: childWidget));
// Search for the childWidget in the tree and verify it exists.
//ウィジェットツリーの中にchildWidgetがあることを確認します。
expect(find.byWidget(childWidget), findsOneWidget);
});
Summary
The find
constant provided by the flutter_test
package provides several ways to locate widgets in the test environment.
flutter_testパッケージが提供するfind定数は、テスト環境でwidgetを検索する(探す)いくつかの方法を提供します。
This recipe demonstrated three of these methods, and several more methods exist for different purposes.
このレシピは、これらの方法のうち3つを示しましたが、これ以外の目的のためにさらにいくつかのメソッドが存在します。
If the above examples do not work for a particular use-case, see the CommonFinders
documentation to review all available methods.
上記サンプルではうまくいかないユースケースについては、 CommonFinders
documentationで全ての利用可能なメソッドから解決策を検討してみてください。
Complete example
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('finds a Text widget', (WidgetTester tester) async {
// Build an App with a Text widget that displays the letter 'H'.
await tester.pumpWidget(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', (WidgetTester tester) async {
// Define the test key.
final 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', (WidgetTester tester) async {
final 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);
});
}
参考