LoginSignup
0
0

More than 1 year has passed since last update.

【Flutter】Widget TestでKeyで探したWidgetのテキストを抽出する。

Last updated at Posted at 2022-08-05

こんにちは。

個人でアプリ開発をしているYuKiOです。
アプリを13本リリースしています。

さて、Flutterの自動テストには「Unit Test」、「Widget Test」、「Integration Test」と3つありますが、

その中で「Widget Test」は、主にアプリのUIを確認するために用いられると思います。

今回は、KeyからWidgetを探して、その中にあるTextを取得します。

例えば、Widget Testで、特定のテキストが表示されているかチェックする場合、このような形で書くと思います。

button_widget_test.dart
   testWidgets('EditButtonに編集と表示されている', (WidgetTester tester) async {
      await tester.pumpWidget(testWidget);
      expect(find.text("編集"), findsOneWidget);
    });

この場合、表示されている数を知りたいなどザックリをチェックしたいのであれば問題がありませんが、例えばリストの特定のボタンが、指定された文字列になっているかはチェックができません。

できれば厳密に指定したいのでKeyを使って文字列をテストする場合、このようにできます。※これはText Widgetを使っている場合です。適宜必要なWidgetを指定してください。

button_widget_test.dart
   testWidgets('EditButtonに編集と表示されている', (WidgetTester tester) async {
      await tester.pumpWidget(testWidget);
     //まずKeyで特定する
    final finder = find.byKey(ValueKey("buttonText1");
     //Widgetを抽出 
    final text = finder.evaluate().single.widget as Text;
    //text.dataに文字列が格納されている。
     expect(text.data, "編集");
    });

たとえば、TextFiledの状態もチェックできます。

button_widget_test.dart
   testWidgets('nameFieldにテストと表示されている', (WidgetTester tester) async {
      await tester.pumpWidget(testWidget);
      final finder = find.byKey("nameField");
      final textField = finder.evaluate().single.widget as TextField;
      final text = textField.controller?.text;
      expect(text, "テスト");
    });

文字の色なんかも、同じような要領で確認できます。

button_widget_test.dart
   testWidgets('EditButtonに編集と表示されている', (WidgetTester tester) async {
      await tester.pumpWidget(testWidget);
    final finder = find.byKey(ValueKey("buttonText1"));
    final text = finder.evaluate().single.widget as Text;
    //text.style?.colorで抽出
    final color = text.style?.color;
    expect(color, Colors.white);
    });
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0