【发布时间】:2019-09-16 05:50:41
【问题描述】:
我有一个小部件测试,用于我命名为DefaultDrawer 的抽屉。我也想测试一下我在DefaultDrawerState.里面做的方法比如,
class DefaultDrawerState extends State<DefaultDrawer> {
@override
Widget build(BuildContext context) {
// ..build..
}
Widget _circleAvatar() {
// a method I want to test
}
}
当flutter_test 查找器似乎无法调用我的小部件或其状态中的方法时,我如何测试方法_circleAvatar()?
下面是我现在的测试文件,没有测试小部件内部的方法:
void main() {
testWidgets('Drawer Test', (WidgetTester tester) async {
final key = GlobalKey<ScaffoldState>();
await tester.pumpWidget(
MaterialApp(home: Scaffold(key: key, drawer: DefaultDrawer())));
// open drawer
key.currentState.openDrawer();
await tester.pump();
// did drawer open?
final drawerFinder = find.byType(Drawer);
expect(drawerFinder, findsOneWidget);
});
}
【问题讨论】:
-
测试小部件的方法被认为是不好的做法。这些是实现细节。
-
那么最佳实践是什么?
-
由于您的
_circleAvatar将在您的build 方法中被调用,因此只需使用find检查一切都已就位。 -
@remi 但是将“内部”小部件分离到它们自己的无状态小部件类可能会提供可单元测试的方式?喜欢 => flutter.institute/flutter-and-widget-tests
-
@ahaaman 避免以通常不使用的方式测试小部件。
标签: unit-testing flutter widget