이벤트 가져오기 위젯 테스트 추가 및 테스트 훅 도입
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:provider/single_child_widget.dart';
|
||||
|
||||
/// 공통 위젯 테스트 유틸
|
||||
/// - MaterialApp/Scaffold 래핑
|
||||
/// - Provider 래핑 헬퍼
|
||||
/// - 드롭다운 오버레이 비의존 패턴(onChanged 직접 호출) 헬퍼
|
||||
class WidgetTestUtils {
|
||||
const WidgetTestUtils._();
|
||||
|
||||
/// MaterialApp + Scaffold로 감싸서 펌프
|
||||
static Future<void> pumpWithScaffold(
|
||||
WidgetTester tester,
|
||||
Widget child,
|
||||
) async {
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
home: Scaffold(body: child),
|
||||
),
|
||||
);
|
||||
// 첫 프레임 렌더링
|
||||
await tester.pump();
|
||||
}
|
||||
|
||||
/// MultiProvider로 감싸서 펌프
|
||||
static Future<void> pumpWithProviders(
|
||||
WidgetTester tester, {
|
||||
required List<SingleChildWidget> providers,
|
||||
required Widget child,
|
||||
}) async {
|
||||
await tester.pumpWidget(
|
||||
MultiProvider(
|
||||
providers: providers,
|
||||
child: MaterialApp(home: Scaffold(body: child)),
|
||||
),
|
||||
);
|
||||
await tester.pump();
|
||||
}
|
||||
|
||||
/// DropdownButtonFormField의 onChanged를 직접 호출하여 값 변경
|
||||
/// overlay를 열지 않아도 되어 타임아웃/플레이키를 방지한다.
|
||||
static Future<void> selectDropdownValue<T>(
|
||||
WidgetTester tester, {
|
||||
Key? fieldKey,
|
||||
T? value,
|
||||
Type fieldType = DropdownButtonFormField,
|
||||
}) async {
|
||||
final finder = fieldKey != null
|
||||
? find.byKey(fieldKey)
|
||||
: find.byType(fieldType);
|
||||
final field = tester.widget<DropdownButtonFormField<T>>(finder);
|
||||
field.onChanged?.call(value);
|
||||
await tester.pump();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user