Skip to content

test(afternote): 새로고침 실패 배너의 표시 갈림이 회귀 테스트로 잠겨 있지 않다 (#705 후속) #1790

Closed

Description

@1hyok

작업 유형

test — 테스트·검증·회귀 방지

주 담당 모듈

afternote — 애프터노트

개요

목록이 남아 있는 새로고침 실패에 배너를 띄우는 갈림이 테스트로 잠겨 있지 않다. #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) 는 같은 함정을 이 모듈에서 반복하지 않게 만드는 값이 있다.

완료 조건

참고

Activity

  1. added
    test테스트·검증·회귀 방지 작업
    area:afternote애프터노트 기능 영역
    on Sep 2, 2026
  2. added
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    and removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 3, 2026
  3. removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:afternote애프터노트 기능 영역test테스트·검증·회귀 방지 작업

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions