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



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

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

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

  • MaterialApp具有Scaffold属性
  • 脚手架具有AppBar属性
  • AppBar的title属性为Text
  • 标题是我的第一个小部件

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

我试过低于测试

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"));

最新更新