gpt4 book ai didi

firebase - 如何为有状态小部件编写测试?

转载 作者:行者123 更新时间:2023-12-04 13:42:09 27 4
gpt4 key购买 nike

我有一个有状态小部件,其状态取决于异步 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() ,您需要拨打 pump() 如果 Future 在设定的时间内完成,则将 Duration 设置为监听。 pump() 的替代方案是 pumpAndSettle() - 调用 pump至少一次,并可重复拨打 pump在给定的持续时间内。

await tester.pumpWidget(new MaterialApp(home: App));
await tester.pumpAndSettle();

关于firebase - 如何为有状态小部件编写测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55647415/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com