test: 통합 테스트 오류 및 경고 수정
- 모든 서비스 메서드 시그니처를 실제 구현에 맞게 수정 - TestDataGenerator 제거하고 직접 객체 생성으로 변경 - 모델 필드명 및 타입 불일치 수정 - 불필요한 Either 패턴 사용 제거 - null safety 관련 이슈 해결 수정된 파일: - test/integration/screens/company_integration_test.dart - test/integration/screens/equipment_integration_test.dart - test/integration/screens/user_integration_test.dart - test/integration/screens/login_integration_test.dart
This commit is contained in:
@@ -3,6 +3,11 @@ import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:get_it/get_it.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:mocktail/mocktail.dart';
|
||||
|
||||
// FlutterSecureStorage Mock 클래스
|
||||
class MockFlutterSecureStorage extends Mock implements FlutterSecureStorage {}
|
||||
|
||||
/// 테스트용 GetIt 인스턴스 초기화
|
||||
GetIt setupTestGetIt() {
|
||||
@@ -11,6 +16,19 @@ GetIt setupTestGetIt() {
|
||||
// 기존 등록된 서비스들 모두 제거
|
||||
getIt.reset();
|
||||
|
||||
// FlutterSecureStorage mock 등록
|
||||
final mockSecureStorage = MockFlutterSecureStorage();
|
||||
when(() => mockSecureStorage.read(key: any(named: 'key')))
|
||||
.thenAnswer((_) async => null);
|
||||
when(() => mockSecureStorage.write(key: any(named: 'key'), value: any(named: 'value')))
|
||||
.thenAnswer((_) async {});
|
||||
when(() => mockSecureStorage.delete(key: any(named: 'key')))
|
||||
.thenAnswer((_) async {});
|
||||
when(() => mockSecureStorage.deleteAll())
|
||||
.thenAnswer((_) async {});
|
||||
|
||||
getIt.registerSingleton<FlutterSecureStorage>(mockSecureStorage);
|
||||
|
||||
return getIt;
|
||||
}
|
||||
|
||||
@@ -24,13 +42,13 @@ class TestWidgetWrapper extends StatelessWidget {
|
||||
final String? initialRoute;
|
||||
|
||||
const TestWidgetWrapper({
|
||||
Key? key,
|
||||
super.key,
|
||||
required this.child,
|
||||
this.providers,
|
||||
this.navigatorObserver,
|
||||
this.routes,
|
||||
this.initialRoute,
|
||||
}) : super(key: key);
|
||||
});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -75,14 +93,25 @@ Future<void> pumpTestWidget(
|
||||
NavigatorObserver? navigatorObserver,
|
||||
Map<String, WidgetBuilder>? routes,
|
||||
String? initialRoute,
|
||||
Size? screenSize,
|
||||
}) async {
|
||||
// 화면 크기 설정
|
||||
if (screenSize != null) {
|
||||
tester.view.physicalSize = screenSize;
|
||||
tester.view.devicePixelRatio = 1.0;
|
||||
} else {
|
||||
// 기본값: 태블릿 크기 (테이블 UI를 위해 충분한 크기)
|
||||
tester.view.physicalSize = const Size(1024, 768);
|
||||
tester.view.devicePixelRatio = 1.0;
|
||||
}
|
||||
|
||||
await tester.pumpWidget(
|
||||
TestWidgetWrapper(
|
||||
child: widget,
|
||||
providers: providers,
|
||||
navigatorObserver: navigatorObserver,
|
||||
routes: routes,
|
||||
initialRoute: initialRoute,
|
||||
child: widget,
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -109,7 +138,6 @@ Future<void> enterTextByLabel(
|
||||
|
||||
if (textFieldFinder.evaluate().isEmpty) {
|
||||
// 라벨로 찾지 못한 경우, 가까운 TextFormField 찾기
|
||||
final labelWidget = find.text(label);
|
||||
final textField = find.byType(TextFormField).first;
|
||||
await tester.enterText(textField, text);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user