firebase - 如何为有状态小部件编写测试?
问题描述
我有一个有状态的小部件,其状态取决于异步 firebase 数据库读取调用。在获取数据时,我会显示一个等待循环指示器。一旦数据获取完成,我将显示实际的 ListView 小部件。
我想写一个小部件测试来测试这个功能。如何在我的测试中设置 isReadComplete = true 的值?或者如何从我的测试中显式调用 success_callback()?
bool isReadComplete;
App(){
isReadComplete = false;
firestore.collection('collection').document('doc').get().then((doc) {
success_callback(doc.data);
}).catchError((error) => {});
}
void success_callback(var data){
setState((){
isReadComplete = true;
})
}
@override
Widget build(BuildContext context) {
if (!isReadComplete) {
return new CircularIndicator();
} else {
List<Widget> widgetList = [];
return Scaffold(
body: ListView(
padding: EdgeInsets.all(8.0),
children: widgetList,
));
}
}
// Test for CircularProgressIndicator
testWidgets("Check CircularProgressIndicator", (WidgetTester tester) async {
await tester.pumpWidget(new MaterialApp(home: App));
// This works fine since isReadComplete = false
expect(find.byType(CircularProgressIndicator), findsOneWidget);
});
// Test for ListView
testWidgets("Check ListView", (WidgetTester tester) async {
await tester.pumpWidget(new MaterialApp(home: App));
// How do I do this?
// How to call success_callback()?
// How to set isReadComplete = true?
expect(find.byType(ListView), findsOneWidget);
});
解决方案
之后pumpWidget()
,如果 Future 在设定的时间内完成,您需要pump()
使用 Duration 集进行调用以侦听。另一种方法pump()
是pumpAndSettle()
-pump
至少调用一次,并且可以pump
在给定的持续时间内重复调用。
await tester.pumpWidget(new MaterialApp(home: App));
await tester.pumpAndSettle();
推荐阅读
- hyperledger-fabric - Hyperledger Fabric:如何制作前端?
- c# - 如何设置等待时间等待结果
- model-view-controller - 对主控制器的 ASP.NET Core 常量请求
- java - 引发并行流引发:java.util.concurrent.TimeoutException:null
- html - 为什么我的 React 渲染的 HTML 元素在刷新后会改变位置?
- c# - 比较文本框值
- windows-10 - 使用 java11 运行 javafx 应用程序时出现“java.lang.RuntimeException:未找到工具包”错误
- android - 地点选择器在启动后自动关闭
- haskell - 如何将解释器带到 IO monad?
- r - 如何从 dplyr 数据框中的每个组中选择最后 N 个观察值?