You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
test(afternote): 새로고침 실패 배너의 표시 갈림이 회귀 테스트로 잠겨 있지 않다 (#705 후속) #1790
목록이 남아 있는 새로고침 실패에 배너를 띄우는 갈림이 테스트로 잠겨 있지 않다.#705 의 구현(PR #1608)은 들어갔지만, 그 표시 여부를 정하는 세 갈래를 확인하는 단언이 없다.
상태
그려야 하는 것
실패 + 목록 있음
새로고침 실패 배너
실패 + 목록 0건
전면 오류 본문
실패 아님
둘 다 아님
지금은 배너 컴포넌트 자체의 계약(문구 노출·다시 시도 전달)만 잠겨 있다. 갈림은 AfternoteHomeScreen 본문의 when 에만 있고 회귀 가드가 없다.
왜 지금 형태로는 못 잠그나
판정 함수는 화면 파일의 private 다. 테스트가 부르려고 공개 범위를 넓히면 #1678 가드가 잡는다. 그래서 화면을 그려서 확인하는 방식을 PR #1608 에서 두 번 시도했고 두 번 다 CI 에서 무너졌다.
1차: PagingData.from 에 로드 상태를 실어 AfternoteHomeScreen 을 그림 → 모듈 전량 실행에서 두 건 실패
2차: waitUntil 로 수집 완료를 기다림 → 로컬은 통과, CI 에서 ComposeTimeoutException
기전은 #1443 이 실측해 둔 것과 같다. collectAsLazyPagingItems 의 첫 로드 상태가 Loading 이고 그것을 걷는 수집이 컴포지션 이펙트에서 도는데, Robolectric 클래스가 누적되면 단언 시점까지 이펙트가 진행되지 않는다. 로컬에서만 통과하는 단언은 가드가 아니라 소음이라 남기지 않고 접었다.
처방 선택지 (착수 시 결정)
(a) 계측 테스트로 올린다. 실기에서는 페이징 수집이 정상으로 돈다. AfternoteAuthorExtendedAndroidTest 가 이미 실패를 만들었다 풀어 주는 페이징 소스로 홈 목록의 오류·재시도를 실기 확인하고 있다. 성공 항목을 먼저 실은 뒤 새로고침을 실패시키면 「목록이 남은 채 실패」 상태를 그대로 만들 수 있다. 새 잡이 생기지 않는다.
(b) 본문 컴포저블을 갈라 결정적으로 그린다.#1443 이 같은 부류를 닫은 방식이다. 목록 본문을 refreshState 와 itemCount 를 인자로 받는 컴포저블로 떼면 테스트가 페이징 수집 없이 상태를 직접 세울 수 있다. 화면이 그 컴포저블을 부르므로 프로덕션 참조가 파일을 넘어 생겨 #1678 도 성립한다. 다만 화면 구조가 바뀌므로 시안 대조가 함께 필요하다.
(a) 가 변경 면적이 작고, (b) 는 같은 함정을 이 모듈에서 반복하지 않게 만드는 값이 있다.
완료 조건
위 세 갈래가 회귀 테스트로 잠긴다
그 테스트가 모듈 전량 실행과 CI 양쪽에서 통과한다. 로컬 단독 실행만으로 판단하지 않는다
Activity