假设我在 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 中正确处理这个测试场景。