// 集成测试:真机/模拟器上跑完整 App 冒烟 // // 与 flutter test 的区别: // 单元/Widget 测试跑在 Dart 虚拟机里(无原生插件,靠 mock); // 集成测试跑在【真实设备】上,插件/网络/文件系统都是真的, // 专门验证"代码 + 原生环境"组合起来能不能正常跑。 // // 运行(需要先插手机或开模拟器): // flutter test integration_test -d // 查看设备:flutter devices // // 注意:不经过 main(),所以 Token 不会从磁盘回填(DioClient.accessToken // 初始为 null)→ go_router 守卫把 / 踢到 /login,首帧是登录页。 // 这就是"真机启动 → 登录守卫"的端到端验证。 import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; import 'package:new_learn/core/app.dart'; void main() { // 集成测试必须最先调用(把测试绑定到真实设备渲染环境) IntegrationTestWidgetsFlutterBinding.ensureInitialized(); testWidgets('真机冒烟:App 启动 → 未登录重定向到登录页', (WidgetTester tester) async { await tester.pumpWidget(const ProviderScope(child: TabApp())); // 真机上等守卫 redirect + 首帧渲染完成 await tester.pumpAndSettle(); expect(find.text('立即登录'), findsOneWidget); expect(find.text('爱学蝶变'), findsOneWidget); // 未登录不该看到主框架 tab expect(find.text('任务'), findsNothing); }); }