翻譯首頁bash
爲了在測試環境裏找到Widgets,咱們須要使用Finder
類。雖然咱們能夠編寫本身的Finder
類,可是一般使用flutter_test
包提供的工具查找Widget更方便。async
在這個示例裏,咱們看一下flutter_test
包提供的find
常量並演示如何使用它提供的一些Finders
。若是查看可用finders的完整列表,請查看CommonFinders文檔ide
若是你不熟悉Widget測試和Finder
類的使用方法,能夠回顧Widget測試介紹。工具
目錄:post
在咱們的測試裏,咱們常常須要查找包含具體文本的Widget。這正是find.text
方法的用途。它將會建立一個Finder
而後搜索顯示指定字符串的Text。學習
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);
});
複製代碼
有時候,咱們可能想要根據已經提供給Widget的Key來查找Widget。在咱們顯示了不少相同Widget的時候使用這種方法很方便。例如,咱們可能有一個ListView列表,顯示了一些包含相同文本的Text Widget。測試
在這個示例裏,咱們能夠給列表裏的每一個Widget都提供一個Key。這將容許咱們惟一標識一個具體的Widget,這樣咱們在測試環境裏查找Widget將更加容易。ui
testWidgets('finds a Widget using a Key', (WidgetTester tester) async {
// Define our 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);
});
複製代碼
flutter_test
包給咱們提供的find
常量給咱們提供了一些在測試環境查找Widget的方法,另外還有一些用於不一樣用途的方法。 若是上述例子不適用於一些特殊用例,請查看CommonFinders文檔並學習更多用法。spa
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 our 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 our 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);
});
}
複製代碼