我有一个有状态的小部件,其状态取决于异步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);
});
答案 0 :(得分:0)
在 pumpWidget()
之后,如果 Future 在设定的时间内完成,您需要调用 pump()
并将 Duration 设置为侦听。 pump()
的替代方法是 pumpAndSettle()
- 它至少调用一次 pump
,并且可能会在给定的持续时间内重复调用 pump
。
await tester.pumpWidget(new MaterialApp(home: App));
await tester.pumpAndSettle();