如何编写小部件树测试来验证树层次结构

How to write widget tree test to verify tree hierarchy

我正在学习 Flutter,我想为我的简单 MyAppBarWidget 编写一个测试。下面是我的小部件

class MyAppBarWidget extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: Text("My first widget"),
          ),
        ));
  }
}

我想测试小部件树层次结构

有什么建议我应该写什么样的测试

我试过以下测试

void main() {
  testWidgets("verify app bar", (WidgetTester tester) async {
    await tester.pumpWidget(MyAppBarWidget());
    var byWidget = find.byType(MaterialApp);
    var text = find.text("My first widget");
    expect(byWidget, findsOneWidget);
    expect(text, findsOneWidget);
  });
}

但是这个测试并没有说我的文本字段在 AppBar 小部件中

有人可以帮我写测试来验证吗?

谢谢

我建议不要测试小部件层次结构,您会经常更改它,并且在测试失败或成功时总是必须在不知道任何实际情况的情况下调整测试。最好测试功能,某物的存在或不存在,点击事件和交互。

您还可以查看黄金(屏幕截图)测试以确保屏幕或页面不会发生变化。

也就是说,如果你真的想这样做,你可以使用

find.ancestor(find.byType(AppBar), find.text("My first widget"));

编辑

或者使用较新版本的测试库,谢谢Fred Grott:

find.ancestor(of: find.byType(AppBar), matching: find.text("My first widget"));