Flutter集成测试中如何判断当前处于指定页面?
Flutter集成测试:判断当前页面(HomePage/OnBoardingPage)
你已经给两个页面设置了唯一Key,接下来直接通过expect断言结合findsOneWidget/findsNothing就能判断当前显示的是哪个页面。
核心实现逻辑
通过你定义的homePageFinder和onBoardingFinder,用断言验证目标页面是否存在:
- 如果页面存在,用
expect(finder, findsOneWidget) - 如果页面不存在,用
expect(finder, findsNothing)
完整测试示例
测试未登录场景(进入引导页)
testWidgets('未登录时进入引导页', (tester) async { // 先模拟未登录状态(根据你的登录逻辑处理,比如清空本地登录缓存) // 示例:await SharedPreferences.getInstance().then((prefs) => prefs.clear()); app.main(); await tester.pumpAndSettle(); final homePageFinder = find.byKey(const Key("homePage")); final onBoardingFinder = find.byKey(const Key("onBoarding")); // 断言引导页存在,首页不存在 expect(onBoardingFinder, findsOneWidget); expect(homePageFinder, findsNothing); });
测试已登录场景(进入首页)
testWidgets('已登录时进入首页', (tester) async { // 先模拟已登录状态(根据你的登录逻辑处理,比如设置登录标记) // 示例:await SharedPreferences.getInstance().then((prefs) => prefs.setBool('isLoggedIn', true)); app.main(); await tester.pumpAndSettle(); final homePageFinder = find.byKey(const Key("homePage")); final onBoardingFinder = find.byKey(const Key("onBoarding")); // 断言首页存在,引导页不存在 expect(homePageFinder, findsOneWidget); expect(onBoardingFinder, findsNothing); });
注意事项
- 确保页面的根Widget确实设置了对应的Key,比如
HomePage的根组件要加Key("homePage"),OnBoardingPage同理 await tester.pumpAndSettle()必须调用,它会等待页面渲染完成、路由动画结束,避免异步加载导致判断出错- 模拟登录状态的代码要和你的业务逻辑匹配,比如用SharedPreferences、Hive或其他状态管理工具来设置登录标记
内容的提问来源于stack exchange,提问作者Ardeshir ojan
相关产品推荐
相关产品推荐

