흔들리는 시험 2개: 정해 둔 시간 대신 될 때까지 기다리기 (decisions_test 126 · drop_test)

- 전체 시험 중 PC 가 바쁘면 실패하던 것 (따로 돌리면 통과). 흔들리는 시험이 실제 실패를 가리지 않게
- decisions_test 126: 설정 파일을 다시 읽어 migrated 가 빌 때까지 (최대 10초)
- drop_test: 안내 글이 뜰 때까지

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
묶음3
RyuJongJin 2026-10-09 19:18:27 +09:00
parent 1c919ce8c6
commit 8f5d2204f0
2 changed files with 19 additions and 10 deletions

View File

@ -128,8 +128,16 @@ void main() {
await tester.pumpAndSettle(); await tester.pumpAndSettle();
expect(find.text('이번 업데이트로 바뀐 기본 설정'), findsOneWidget); expect(find.text('이번 업데이트로 바뀐 기본 설정'), findsOneWidget);
await tester.tap(find.text('확인')); await tester.tap(find.text('확인'));
// 파일 쓰기 (진짜 입출력) 가 끝나게 몇 번 돌려 준다 // 파일 쓰기 (진짜 입출력) 가 끝날 때까지 (정해 둔 시간이 아니라 파일에 실제로 쓰일 때까지 - 전체 시험 중 느려도 흔들리지 않게)
for (var i = 0; i < 20; i++) { for (var i = 0; i < 200; i++) {
final now = await tester.runAsync(() async {
try {
return (await SettingsStore(file, MemorySecretStore()).load()).migrated;
} catch (_) {
return null; // 쓰는 도중
}
});
if (now != null && now.isEmpty) break;
await tester.runAsync(() => Future<void>.delayed(const Duration(milliseconds: 50))); await tester.runAsync(() => Future<void>.delayed(const Duration(milliseconds: 50)));
await tester.pump(); await tester.pump();
} }

View File

@ -81,9 +81,12 @@ void main() {
for (var i = 0; i < 250 && c.videos.isEmpty; i++) { for (var i = 0; i < 250 && c.videos.isEmpty; i++) {
await Future<void>.delayed(const Duration(milliseconds: 20)); await Future<void>.delayed(const Duration(milliseconds: 20));
} }
await Future<void>.delayed(const Duration(milliseconds: 100));
}); });
await tester.pump(); // 안내가 뜰 때까지 (정해 둔 시간이 아니라 - 전체 시험 중 느려도 흔들리지 않게)
for (var i = 0; i < 100 && find.textContaining('동영상 목록에 1개를 추가했습니다').evaluate().isEmpty; i++) {
await tester.runAsync(() => Future<void>.delayed(const Duration(milliseconds: 50)));
await tester.pump();
}
expect([for (final v in c.videos) v.fileName], ['끌어온 영상.mp4']); expect([for (final v in c.videos) v.fileName], ['끌어온 영상.mp4']);
expect(c.selected, c.videos.single); expect(c.selected, c.videos.single);
expect(find.textContaining('여기에 놓으면'), findsNothing); expect(find.textContaining('여기에 놓으면'), findsNothing);
@ -92,12 +95,10 @@ void main() {
// 같은 것을 다시 놓으면 "이미 있음" // 같은 것을 다시 놓으면 "이미 있음"
await _native(tester, 'entered', [400.0, 300.0]); await _native(tester, 'entered', [400.0, 300.0]);
await tester.pump(); await tester.pump();
await tester.runAsync(() async { await tester.runAsync(() => _native(tester, 'performOperation', [file]));
await _native(tester, 'performOperation', [file]); // 앞의 안내가 사라지고 새 안내가 나올 때까지 (될 때까지 기다림, 최대 10초)
await Future<void>.delayed(const Duration(milliseconds: 1000)); for (var i = 0; i < 50 && find.textContaining('이미 동영상 목록에 있습니다').evaluate().isEmpty; i++) {
}); await tester.runAsync(() => Future<void>.delayed(const Duration(milliseconds: 50)));
// 앞의 안내가 사라지고 새 안내가 나올 때까지
for (var i = 0; i < 10; i++) {
await tester.pump(const Duration(milliseconds: 200)); await tester.pump(const Duration(milliseconds: 200));
} }
expect(c.videos, hasLength(1)); expect(c.videos, hasLength(1));