앱 단위·화면·통합 테스트
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
import 'package:fancake/core/i18n/app_locale.dart';
|
||||
import 'package:fancake/core/theme/app_theme.dart';
|
||||
import 'package:fancake/features/campaign/campaign_detail_screen.dart';
|
||||
import 'package:fancake/features/home/nebula_create_screen.dart';
|
||||
import 'package:fancake/features/inside/inside_data.dart';
|
||||
import 'package:fancake/features/inside/inside_detail_screen.dart';
|
||||
import 'package:fancake/features/my/my_data.dart';
|
||||
import 'package:fancake/features/my/my_screen.dart';
|
||||
import 'package:fancake/features/quest/quest_data.dart';
|
||||
import 'package:fancake/features/quest/quest_list_screen.dart';
|
||||
import 'package:fancake/features/station/station_screen.dart';
|
||||
import 'package:fancake/l10n/app_localizations.dart'
|
||||
show lookupAppLocalizations;
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
/// 이전한 화면을 ko 가 아닌 언어로 띄워 문구가 바뀌고, 긴 번역에도 레이아웃이
|
||||
/// 넘치지 않는지(RenderFlex overflow 등) 본다. 폭은 작은 단말(360×800) 기준.
|
||||
void main() {
|
||||
tearDown(() => appL10n = koL10n);
|
||||
|
||||
final screens = <String, (Widget, String Function(AppLocalizations))>{
|
||||
'MY': (MyScreen(repository: SampleMyRepository()), (l) => l.myTabActivity),
|
||||
'QUEST': (
|
||||
const QuestListScreen(repository: SampleQuestRepository()),
|
||||
(l) => l.questDailyHelp,
|
||||
),
|
||||
'STATION': (const StationScreen(), (l) => l.stationSuggest),
|
||||
'성운 생성': (const NebulaCreateScreen(), (l) => l.nebulaHeadline),
|
||||
'캠페인 상세': (
|
||||
CampaignDetailScreen(campaignId: 'c1', myPop: 1000),
|
||||
(l) => l.campaignFundingStatus,
|
||||
),
|
||||
'INSIDE 상세': (
|
||||
InsideDetailScreen(
|
||||
question: InsideQuestion(
|
||||
id: 'q-0',
|
||||
title: 'Title',
|
||||
body: 'Body',
|
||||
authorName: 'fan',
|
||||
createdAt: DateTime(2026, 9, 1),
|
||||
bountyPop: 500,
|
||||
),
|
||||
answers: sampleInsideAnswers,
|
||||
),
|
||||
(l) => l.insideAnswerHint,
|
||||
),
|
||||
};
|
||||
|
||||
for (final locale in const [Locale('en'), Locale('ja')]) {
|
||||
for (final MapEntry(key: name, value: (screen, marker))
|
||||
in screens.entries) {
|
||||
testWidgets('$name 화면이 ${locale.languageCode} 로 넘침 없이 그려진다', (
|
||||
tester,
|
||||
) async {
|
||||
tester.view.physicalSize = const Size(1080, 2400);
|
||||
tester.view.devicePixelRatio = 3;
|
||||
addTearDown(tester.view.reset);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
theme: buildAppTheme(),
|
||||
locale: locale,
|
||||
supportedLocales: appLocales,
|
||||
localizationsDelegates: const [
|
||||
RemoteL10nDelegate({}),
|
||||
GlobalMaterialLocalizations.delegate,
|
||||
GlobalWidgetsLocalizations.delegate,
|
||||
GlobalCupertinoLocalizations.delegate,
|
||||
],
|
||||
home: screen,
|
||||
),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(tester.takeException(), isNull);
|
||||
expect(
|
||||
find.text(marker(lookupAppLocalizations(locale)), findRichText: true),
|
||||
findsWidgets,
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user