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

问题描述

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

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

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

  • MaterialApp具有脚手架属性
  • 脚手架具有AppBar属性
  • AppBar的标题属性为文本
  • 标题是我的第一个小工具

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

我尝试了以下测试

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...