로그인 세션이 필요한 화면은 시뮬레이터에서 그냥 띄울 수 없습니다. 그래서 화면을 값만 받는 독립 뷰로 뽑아 유닛 테스트에서 PNG로 렌더하는 방식을 씁니다. 픽셀을 직접 보고 디자인을 확인하려는 목적입니다. 뷰를 쪼개는 건 설계상으로도 낫습니다.
그러다 가장 이상한 걸 만났습니다. 완전히 투명한 화면을 렌더했더니 앞 테스트가 그린 그림이 그대로 나왔습니다.
당신의 렌더 검증은 "무언가 그려졌다"를 보고 있습니까, **"이번에 그려졌다"**를 보고 있습니까?
렌더러가 직전 결과를 돌려줍니다
콘텐츠가 전부 투명하면 렌더러가 새 이미지를 만들지 않고 직전 렌더 결과를 그대로 돌려줍니다.
투명도 0인 27pt 조각을 구웠더니, 앞 테스트가 그린 86pt짜리가 3,676 픽셀로 나왔습니다. 같은 좌표·같은 크기라서 "왜 안 사라지지"로 한참 헤맸습니다.
렌더 검증이 거짓말한 다른 사례는 스크린샷이 남의 앱 것으로 오염된 적에 있습니다. 테스트를 직렬로 돌리는 것으로도 막히지 않습니다. 순서만 직렬일 뿐 렌더러 상태는 공유됩니다.
결론은 이렇습니다. "빈 화면"·"완전히 사라졌다"는 값 테스트로 봐야 하고, 렌더 캡처는 보이는 것만 봐야 합니다.
같은 파이프라인에서 나온 함정 셋
환경변수가 테스트 프로세스에 안 닿습니다. 셸에서 출력 경로를 넘기는 것도, 전용 접두사를 붙이는 것도 안 됐습니다. 임시 디렉터리에 쓰고 경로를 print해서 호스트에서 그 경로를 여는 방식으로 바꿨습니다.
틴트를 안 걸면 색이 거짓말합니다. 실제 앱에서는 상위 탭 뷰의 틴트를 시트가 환경으로 상속받습니다. 격리 렌더에는 그게 없어서 시스템 파랑이 나옵니다. 색이 틀렸다는 버그로 오인하기 딱 좋습니다.
크기만 검사하는 단정은 빈 화면을 통과시킵니다. 1200×340 PNG가 나왔다는 것은 캔버스가 그 크기라는 뜻이고 내용에 대해서는 아무 말도 하지 않습니다. 좌상단 픽셀을 배경색으로 잡고, 그와 다른 픽셀의 비율까지 봐야 합니다.
당신이라면?
요소가 사라졌는지 확인해야 합니다. 어떻게 보겠습니까?
- 렌더해서 눈으로 본다 — 투명 렌더는 직전 그림을 돌려준다. 사라짐은 이 방법으로 관측 불가다.
- 크기를 단정한다 — 빈 화면이 통과한다.
- 값으로 본다 — 뷰가 그 요소를 만들지 않는지 상태·트리로 확인한다.
세 번째뿐입니다. 그리고 이건 우회가 아니라 역할 분담입니다. 렌더는 "이렇게 보인다"를, 값 테스트는 "없다"를 증언합니다.
자가진단 세 줄
- 투명·빈 화면을 렌더로 검증하고 있습니까? 렌더러가 직전 결과를 돌려줄 수 있습니다. 없어졌다는 판정은 값으로 하십시오.
- 격리 렌더에 실제 앱의 환경(틴트·폰트·다이내믹 타입)이 주입돼 있습니까? 없으면 색과 크기가 실제와 다르게 나옵니다.
- PNG 단정이 크기만 봅니까? 배경색과 다른 픽셀의 비율을 함께 보십시오.
솔직한 부분
투명 화면 문제는 결국 "렌더로는 검증 못 한다"로 결론 냈습니다. 우회한 게 아니라 검증 수단을 포기한 것입니다.
그리고 이 방식으로는 누를 수 없습니다. 시뮬레이터 CLI에는 탭 서브커맨드가 없고, 유닛 테스트 렌더에는 상호작용이 없습니다. 즉 이 파이프라인이 답할 수 있는 질문은 "이 상태를 그리면 어떻게 보이나"까지입니다. "이 버튼을 누르면 되나"는 여전히 다른 도구가 필요합니다.