【发布时间】:2019-09-02 23:17:04
【问题描述】:
我有一个状态小部件,其状态取决于异步 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);
});
【问题讨论】:
-
是什么导致
success_callback被调用?您需要重现导致success_callback调用的原因,然后从测试中的状态对象中读取值。有一个测试有状态小部件的示例here -
即数据库调用成功后的回调。我现在把它放在代码中。我不想在测试中进行数据库读/写。
-
你找到了吗?
-
不,我没有。但我相信这可以通过将代码移动到控制器类来完成。
标签: firebase flutter google-cloud-firestore widget flutter-test