【发布时间】:2018-11-15 05:01:48
【问题描述】:
假设我在 Flutter 中使用 WidgetTester 测试了一个屏幕。有一个按钮,通过Navigator 执行导航。我想测试该按钮的行为。
小部件/屏幕
class MyScreen extends StatefulWidget {
MyScreen({Key key}) : super(key: key);
@override
_MyScreenState createState() => _MyScreenScreenState();
}
class _MyScreenState extends State<MyScreen> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
onPressed: () {
Navigator.of(context).pushNamed("/nextscreen");
},
child: Text(Strings.traktTvUrl)
)
)
);
}
}
测试
void main() {
testWidgets('Button is present and triggers navigation after tapped',
(WidgetTester tester) async {
await tester.pumpWidget(MaterialApp(home: MyScreen()));
expect(find.byType(RaisedButton), findsOneWidget);
await tester.tap(find.byType(RaisedButton));
//how to test navigator?
});
}
我有一个正确的方法来检查,那个导航器被调用了吗?或者有没有办法模拟和替换导航器?
请注意,上面的代码实际上会因异常而失败,因为应用程序中没有声明命名路由'/nextscreen'。这很容易解决,你不需要指出来。
我主要关心的是如何在 Flutter 中正确处理这个测试场景。
【问题讨论】:
标签: dart flutter flutter-test