이벤트 가져오기 위젯 테스트 추가 및 테스트 훅 도입

This commit is contained in:
2025-09-12 06:33:44 +09:00
parent 107abc963f
commit a5f2544d11
121 changed files with 39277 additions and 3911 deletions
@@ -0,0 +1,76 @@
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:lanebow/widgets/owner_dropdown.dart';
import 'package:lanebow/models/member_model.dart';
void main() {
group('OwnerDropdown', () {
testWidgets('빌드 시 onItemsBuilt로 항목 수를 보고하고, onChanged로 값이 변경된다', (tester) async {
// Arrange: 샘플 멤버 2명
final members = <Member>[
Member(
id: 'm1',
userId: 'u1',
clubId: 'c1',
name: '아무개 A',
email: 'a@example.com',
gender: 'male',
isActive: true,
memberType: 'regular',
status: 'active',
),
Member(
id: 'm2',
userId: 'u2',
clubId: 'c1',
name: '아무개 B',
email: 'b@example.com',
gender: 'female',
isActive: true,
memberType: 'associate',
status: 'active',
),
];
String? selected = members.first.userId;
int? builtCount;
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: Padding(
padding: const EdgeInsets.all(8.0),
child: OwnerDropdown(
members: members,
value: selected,
onChanged: (v) {
selected = v;
},
onItemsBuilt: (count) => builtCount = count,
),
),
),
),
);
// onItemsBuilt는 microtask로 호출되므로 한 번 더 펌프
await tester.pump();
// Assert: 항목 수 콜백이 2로 보고됨
expect(builtCount, 2);
// Act: 오버레이를 열지 않고 DropdownButtonFormField의 onChanged를 직접 호출
final field = tester.widget<DropdownButtonFormField<String>>(
find.byType(DropdownButtonFormField<String>),
);
field.onChanged?.call(members[1].userId);
// 한 프레임 펌프하여 상태 반영
await tester.pump();
// Assert: 선택 값이 두 번째 사용자로 변경됨
expect(selected, members[1].userId);
});
});
}