From e37a2ddfa8b5180028c769e3efa151a0c74cb530 Mon Sep 17 00:00:00 2001 From: JiWoong Sul Date: Wed, 21 Jan 2026 18:43:26 +0900 Subject: [PATCH] =?UTF-8?q?fix(test):=20widget=5Ftest=20=ED=83=80=EC=9D=B4?= =?UTF-8?q?=EB=A8=B8=20=EC=9D=B4=EC=8A=88=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - TestSetup 헬퍼 사용으로 SharedPreferences 모킹 통합 - AudioService 타이머 완료를 위한 1초 pump 추가 - tearDown에서 싱글톤 서비스 정리로 타이머 누수 방지 --- test/widget_test.dart | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/test/widget_test.dart b/test/widget_test.dart index 04dd53f..22ed035 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -1,25 +1,27 @@ import 'package:asciineverdie/src/app.dart'; -import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; +import 'helpers/test_setup.dart'; + void main() { // SharedPreferences 모킹 setUpAll(() { - TestWidgetsFlutterBinding.ensureInitialized(); - const MethodChannel( - 'plugins.flutter.io/shared_preferences', - ).setMockMethodCallHandler((call) async { - if (call.method == 'getAll') return {}; - return null; - }); + TestSetup.mockSharedPreferences(); + }); + + // 각 테스트 후 싱글톤 서비스 정리 (타이머 누수 방지) + tearDown(() { + TestSetup.resetAllServices(); }); testWidgets('App launches and shows splash screen', (tester) async { await tester.pumpWidget(const AskiiNeverDieApp()); - // 앱 시작 시 스플래시 화면이 표시되는지 확인 - // (비동기 세이브 확인 동안 스플래시 표시) - await tester.pump(); + // AudioService 초기화 타이머들이 완료될 시간 제공 + // - init() 내 Future.delayed 200ms (line 130) + // - _initSfxPools() 내 Future.delayed 200ms (line 201) + // - 재시도 로직의 추가 지연 가능성 + await tester.pump(const Duration(seconds: 1)); // 앱이 정상적으로 렌더링되는지 확인 (크래시 없음) expect(find.byType(AskiiNeverDieApp), findsOneWidget);