flutter - 如何在单元测试期间访问 StatefulWidget 的状态内容?

我有一个 StatefulWidget(称为 MyWidget),它的 State (MyWidgetState) 有一个字段 myData,该字段在 initState 期间初始化()如下:

void initState() {
    super.initState();
    myData = new myData(config.someField.getId());
}

当用户按下按钮时,myData 会被添加到全局列表中或从全局列表中删除。

我正在尝试编写一个单元测试来测试这种行为,但我不知道如何访问 MyWidgetState。我尝试在 setup() 中包含这个:

widget = MyWidget();
widgetState = widget.createState(); 
widgetState.init();

但它每次尝试 initState() 时都会崩溃,并提示“someField was called on null”。没关系。我尝试这样做可能是在作弊,我应该使用 WidgetBuilder 做一些事情或使用 MyWidget 启动应用程序,然后在正确实例化后在树中找到 MyWidget。

如果我做了所有这些,一旦我完成了,我如何访问该 MyWidget 的 MyWidgetState 以获取 myData 的副本并将其与全局列表进行比较?

最佳答案

您可以创建一个状态,然后访问它的内容。 关注 Ian Hickson回答。下面是一个实现的例子:

final MyWidgetState myWidgetState = tester.state(find.byType(MyWidget));

然后就可以访问状态内容了:

myWidgetState.myData;

您可以在 Flutter 的 repo 中找到更多示例.

https://stackoverflow.com/questions/42127901/

相关文章:

dart - ScrollController 如何检测滚动开始、停止和滚动?

charts - 如何在 flutter 中制作动态图表?

dart - 使用键和值从 map 创建小部件列表

flutter - 如何使 Bottom Sheet 格的高度跟随 JSON 的项目数量

intellij-idea - 如何启用 Flutter/Dart 语言实验?

ios - 将今天的扩展添加到 flutter 应用程序的问题

flutter - 通过 Firebase 使用 Google 登录时, 'ApiExpceptio

authentication - 如何在 Flutter 应用中集成 Azure AD SSO

flutter - 将文本包裹在一个圆圈内 (Flutter)

flutter - 找出 ListView 中的哪些项目是可见的