比方说,我使用WidgetTester
在Flutter中测试了一个屏幕。有一个按钮,它通过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?
});
}
有没有合适的方法检查一下,那个Navigator是怎么调用的?或者有没有办法模拟和替换导航器?
请注意,上述代码实际上将失败并引发异常,因为应用程序中没有声明命名路由'/nextscreen'
。这很容易解决,而且你不需要指出它。
我主要关心的是如何在Flutter中正确地处理这个测试场景。
https://stackoverflow.com/questions/50704647
复制相似问题