TDD 작성
This commit is contained in:
@@ -1,14 +1,13 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:lanebow/config/api_config.dart';
|
||||
import 'package:lanebow/models/member_model.dart';
|
||||
import 'package:lanebow/services/api_service.dart';
|
||||
import 'package:lanebow/services/member_service.dart';
|
||||
import 'package:lanebow/services/event_bus.dart';
|
||||
import 'package:lanebow/utils/test_utils.dart';
|
||||
|
||||
import 'member_service_integration_test.mocks.dart';
|
||||
|
||||
@@ -16,8 +15,14 @@ import 'member_service_integration_test.mocks.dart';
|
||||
void main() {
|
||||
late MemberService memberService;
|
||||
late MockApiService mockApiService;
|
||||
late String testId;
|
||||
|
||||
setUp(() {
|
||||
// 테스트 ID 생성 및 설정
|
||||
testId = 'member_service_integration_test_${DateTime.now().millisecondsSinceEpoch}';
|
||||
EventBus.setCurrentTestId(testId);
|
||||
TestUtils.setTestMode(true);
|
||||
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
SharedPreferences.setMockInitialValues({
|
||||
ApiConfig.clubIdKey: 'test_club_id', // SharedPreferences에 clubId 설정
|
||||
@@ -41,6 +46,10 @@ void main() {
|
||||
}
|
||||
]);
|
||||
|
||||
print('EventBus: 초기화됨 (테스트 ID: $testId)');
|
||||
|
||||
memberService = MemberService.forTest(mockApiService);
|
||||
|
||||
// 새 클럽 ID에 대한 회원 목록 조회 모킹
|
||||
when(mockApiService.post(
|
||||
'${ApiConfig.clubs}/members',
|
||||
@@ -424,11 +433,31 @@ void main() {
|
||||
// 모든 호출 기록 초기화
|
||||
clearInteractions(mockApiService);
|
||||
|
||||
// 이벤트 처리 결과를 기다리기 위한 Completer 생성
|
||||
final completer = Completer<void>();
|
||||
|
||||
// 회원 목록이 변경될 때 Completer 완료
|
||||
memberService.addListener(() {
|
||||
if (memberService.members.isNotEmpty &&
|
||||
memberService.members[0].name == '새 클럽 회원') {
|
||||
if (!completer.isCompleted) {
|
||||
completer.complete();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// when - 클럽 변경 이벤트 발생
|
||||
EventBus().fire(ClubChangedEvent(newClubId));
|
||||
|
||||
// 이벤트 처리를 위한 지연
|
||||
await Future.delayed(Duration(milliseconds: 500));
|
||||
// 이벤트 처리 완료 대기 (최대 3초)
|
||||
await completer.future.timeout(
|
||||
Duration(seconds: 3),
|
||||
onTimeout: () {
|
||||
if (!completer.isCompleted) {
|
||||
completer.completeError('이벤트 처리 시간 초과');
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
// then
|
||||
// 새 클럽 ID로 회원 목록 조회 API 호출 확인
|
||||
@@ -522,4 +551,12 @@ void main() {
|
||||
)).called(1);
|
||||
});
|
||||
});
|
||||
|
||||
tearDown(() {
|
||||
// 테스트 종료 후 정리
|
||||
memberService.dispose();
|
||||
EventBus.clearCurrentTestId();
|
||||
TestUtils.setTestMode(false);
|
||||
print('EventBus: 초기화됨 (테스트 ID: $testId)');
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user