Skip to content

源码:labs/flutter/host/integration_test/app_boot_test.dart ​

  • 原始路径:labs/flutter/host/integration_test/app_boot_test.dart
  • 类型:dart
dart
// ⚠️ 需要真机/模拟器:本文件是端到端集成测试,普通 `fvm flutter test`(只跑 test/)
// 不会执行它;请连接设备后按本目录 README.md 的说明运行。
import 'package:engineering_review_lab_flutter_host/app/app.dart';
import 'package:engineering_review_lab_flutter_host/l10n/l10n.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';

/// 端到端集成测试(真实设备/模拟器运行)。
///
/// 运行方式:
/// ```bash
/// cd labs/flutter/host
/// fvm flutter test integration_test/app_boot_test.dart -d <device>
/// ```
///
/// 与 test/ 下 widget 测试的分工:
/// - widget 测试:纯 UI 页面的构建与导航冒烟(无插件、无真实网络)
/// - 集成测试:覆盖依赖平台插件 / 真实网络 / 真实生命周期的页面
void main() {
  IntegrationTestWidgetsFlutterBinding.ensureInitialized();

  Future<AppLocalizations> pumpApp(WidgetTester tester) async {
    await tester.pumpWidget(const EngineeringReviewLabApp());
    await tester.pumpAndSettle();
    return tester.element(find.byType(Scaffold).first).l10n;
  }

  void goBack(WidgetTester tester) {
    tester.state<NavigatorState>(find.byType(Navigator).first).pop();
  }

  testWidgets('应用在真实设备上启动并渲染首页 Lab 列表', (tester) async {
    final l10n = await pumpApp(tester);

    expect(find.text(l10n.homeAppBarTitle), findsOneWidget);
    expect(find.text(l10n.homeItemLifecycleTitle), findsOneWidget);
  });

  testWidgets('PlatformChannel 页面在宿主上可打开且不崩溃', (tester) async {
    final l10n = await pumpApp(tester);

    // MethodChannel / EventChannel 依赖真实宿主实现,widget 测试跑不了,
    // 这里验证真实设备上进入页面、触发一次电量读取不崩溃。
    await tester.dragUntilVisible(
      find.text(l10n.homeItemChannelTitle),
      find.byType(ListView),
      const Offset(0, -120),
    );
    await tester.tap(find.text(l10n.homeItemChannelTitle));
    await tester.pumpAndSettle();

    expect(find.byType(Scaffold), findsWidgets);

    goBack(tester);
    await tester.pumpAndSettle();
  });

  testWidgets('CachedNetworkImage 页面在真实网络下可渲染', (tester) async {
    final l10n = await pumpApp(tester);

    await tester.dragUntilVisible(
      find.text(l10n.homeItemImageLoadingTitle),
      find.byType(ListView),
      const Offset(0, -120),
    );
    await tester.tap(find.text(l10n.homeItemImageLoadingTitle));
    await tester.pumpAndSettle();

    expect(find.byType(Scaffold), findsWidgets);

    goBack(tester);
    await tester.pumpAndSettle();
  });
}

站点构建时间:2026/8/24 23:43:17