Testing Flutter apps翻譯-查找child widget

翻譯首頁bash

爲了在測試環境裏找到Widgets,咱們須要使用Finder類。雖然咱們能夠編寫本身的Finder類,可是一般使用flutter_test包提供的工具查找Widget更方便。async

在這個示例裏,咱們看一下flutter_test包提供的find常量並演示如何使用它提供的一些Finders。若是查看可用finders的完整列表,請查看CommonFinders文檔ide

若是你不熟悉Widget測試和Finder類的使用方法,能夠回顧Widget測試介紹工具

目錄:post

  1. 查找TextWidget
  2. 使用一個具體的Key查找一個Widget
  3. 查找一個具體的Widget實例

1. 查找TextWidget

在咱們的測試裏,咱們常常須要查找包含具體文本的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);
});
複製代碼

2. 使用一個具體的Key查找一個Widget

有時候,咱們可能想要根據已經提供給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);
  });
}
複製代碼
相關文章
相關標籤/搜索