【发布时间】:2021-09-06 17:36:35
【问题描述】:
我正在尝试进行小部件测试,并且我有一个这样的小部件,并且 item = [] 中的对象是 4:
Widget _generateNodesWidget() {
return ListView(
children: [
Padding(
padding: const EdgeInsets.all(10.0),
child: ExpansionPanelList(
expansionCallback: (int index, bool isExpanded) {
setState(() {
_items[index].isExpanded = !_items[index].isExpanded;
//TODO: Implement the call to blocks widget here
_items[index].body = _items[index].node.blocks.isEmpty ? _buildBlankBlockTile() : BlockWidget(nodeElement: _items[index],);
});
},
children: _items.map((NodeElement item) {
return ExpansionPanel(
headerBuilder: (BuildContext context, bool isExpanded) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: NodeWidget(node: item.node),
);
},
isExpanded: item.isExpanded,
body: item.body,
);
}).toList(),
))
],
);
}
在下面运行此测试也可以:
testWidgets('Verify the completion of the first call ',
(WidgetTester tester) async {
await tester.pumpWidget(
ChangeNotifierProvider<NodesProvider>(
create: (_) => NodesProvider(),
child: const MediaQuery(
data: MediaQueryData(),
child: MaterialApp(
home: ToysScreen(),
),
),
),
);
await tester.pumpAndSettle();
expect(find.byType(NodeWidget), findsNWidgets(4)); // this finds the NodeWidget
expect(find.byType(ExpansionPanelList), findsNWidgets(1)); // this finds the ExpansionPanelList
expect(find.byType(ListView), findsNWidgets(1)); // this finds the ListView
});
但即使 ExpansionPanel 是 NodeWidget 的父级和 ExpansionListTile 的子级,下面的代码也无法正常工作:
expect(find.byType(ExpansionPanel), findsNWidgets(4)); // it fails cause it 0 even tho there are 4 ExpansionPanel displayed on Screen;
可能是什么问题?
【问题讨论】:
标签: flutter flutter-test