在 Flutter 测试中,是否可以从给定的小部件访问 children/parent 个小部件?
Is it possible to access children/parent widgets from a given widget, in a Flutter test?
我正在为 Flutter 编写单元和集成测试。是否可以从给定的小部件访问 children/parent 个小部件?
是的,您可以使用 find.descendant
and Element.ancestorWidgetOfExactType
。
示例:
// Finds a RichText widget that a descendant (child/grand-child/etc) of a
// tab widget with text "Tab 1"
find.descendant(of: find.text('Tab 1'), matching: find.byType(RichText));
// Finds a parent widget of type MyParentWidget.
tester.element(find.byType(MyChildWidget))
.ancestorWidgetOfExactType(MyParentWidget);
ancestorWidgetOfExactType 已弃用,更喜欢使用 findAncestorWidgetOfExactType
// Parent with a child & grand child
class ParentWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChildWidget(
child: GrandChildWidget(),
);
}
}
// Tests
void main() {
testWidgets('parent, child & grand-child hierarchy', (WidgetTester tester) async {
Widget parentWidget = ParentWidget();
await tester.pumpWidget(parentWidget);
final childFinder = find.descendant(of: find.byWidget(parentWidget), matching: find.byType(ChildWidget));
expect(childFinder, findsOneWidget);
final grandChildFinder = find.descendant(of: find.byWidget(parentWidget), matching: find.byType(GrandChildWidget));
expect(grandChildFinder, findsOneWidget);
final parentFinder = find.ancestor(of: find.byWidget(childWidget), matching: find.byType(ParentWidget));
expect(parentFinder, findsOneWidget);
});
}
Flutter 文档 - descendant & ancestor
我正在为 Flutter 编写单元和集成测试。是否可以从给定的小部件访问 children/parent 个小部件?
是的,您可以使用 find.descendant
and Element.ancestorWidgetOfExactType
。
示例:
// Finds a RichText widget that a descendant (child/grand-child/etc) of a
// tab widget with text "Tab 1"
find.descendant(of: find.text('Tab 1'), matching: find.byType(RichText));
// Finds a parent widget of type MyParentWidget.
tester.element(find.byType(MyChildWidget))
.ancestorWidgetOfExactType(MyParentWidget);
ancestorWidgetOfExactType 已弃用,更喜欢使用 findAncestorWidgetOfExactType
// Parent with a child & grand child
class ParentWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChildWidget(
child: GrandChildWidget(),
);
}
}
// Tests
void main() {
testWidgets('parent, child & grand-child hierarchy', (WidgetTester tester) async {
Widget parentWidget = ParentWidget();
await tester.pumpWidget(parentWidget);
final childFinder = find.descendant(of: find.byWidget(parentWidget), matching: find.byType(ChildWidget));
expect(childFinder, findsOneWidget);
final grandChildFinder = find.descendant(of: find.byWidget(parentWidget), matching: find.byType(GrandChildWidget));
expect(grandChildFinder, findsOneWidget);
final parentFinder = find.ancestor(of: find.byWidget(childWidget), matching: find.byType(ParentWidget));
expect(parentFinder, findsOneWidget);
});
}
Flutter 文档 - descendant & ancestor