This message was deleted.
# 질문
s
This message was deleted.
ohh 1
h
뭔가 지옥도가 상상되네요
😅 1
t
오우… experimental…
h
react 는 둘째치고
h
스토리북….
모킹해서 쓰시는건 아니죠?
relay env 는 글로벌 데코레이터로 해주면 될거고
u
msw 도 어떻게 어떻게 하면 될 것 같아서 알아보다가 영 아닌거같아서 ㅜㅜ
h
react, react-dom 버전 피닝 하셔야하고
u
useTranslation
같은 CM 은 아직 어려운 것 같아서 서스펜스만 사용해보려고 하고 있습니다 그래서 따로 버전 피닝은 안했구요
h
쿼리렌더러가…
음 일단 fragment ref 를 어떻게 만들어 넘겨줄지 고민해봐야겠네요
기본전략은
container vs presentational component 를 나눠서 개발하시는게………..
😭 1
u
굉장히 까다롭네욤.. 테스트 케이스 추가해보려는 시점부터 experimental 의 위험성을 몸소 체감하고 있는 것 같습니다 😓
h
아뇨 experimental 의 문제는 아닌거같은데 ㅋㅋㅋㅋ
👀 1
u
기능적인 것 보다 문서나 리소스 측면에서 그렇다고 생각했는데 아니였을까요
분명 뭔가 테스트 할 수 있을 것 같은데………. 말씀해주신대로 container 와 presenter 나누는 것은 좀만더,, 고민해보고 난 뒤에 채택하고 싶습니다 ㅠㅠ
h
릴레이 작동방식을 생각해보면요
fragment container 로 의존성 선언을 컴포넌트에 가깝게 배치하고 컴파일러가 분석해서 아티팩트를 만들어준다
이 아티팩트는 쿼리 렌더러를 기준으로 최적화 되어 있다
쿼리 렌더러 기준에서 볼 때는 composition 이 다 되어 있거든요
u
넹넹
h
다른 테스트는 모르겠으나 적어도 스토리북이랑은 접근방식이 좀 충돌하죠
😫 1
쓰시려면
컴파일러랑 바벨 트랜스폼을 스토리북 쪽에도 세팅해주셔야 할 거고요
.storybook/main.js 여기서 웹팩 좀 뜯어 고치셔야 할거고
근데 기본적으로 릴레이 기본전략이 fragment 를 container 에 사용하는거니 container 를 스토리북에 안올리면 된다고 생각합니다
코드가 선언적으로 작성될 수록 기계적인 유닛테스트는 가치가 떨어지니 테스트는 통합 테스트 위주로 작성하시는게 나을거고
🤔 1
jest 도 뭐 설정할게 많을테니까요
요컨데 설정때문에 고생하기 싫으시면
cypress나 jest puppe 같은 real dom 환경 올리고 e2e로 커버하시는게 낫지 않나
u
말씀해주신거 듣기만해도 벌써 소름이 돋긴 하네요
h
cypress 도 msw 처럼 요청 인터셉트하는 인터페이스가 있을거에요
u
코드가 선언적으로 작성될 수록 기계적인 유닛테스트는 가치가 떨어지니 테스트는 통합 테스트 위주로 작성하시는게 나을거고
이 부분에서 생각을 좀 더 하게 되는 것 같습니다 🙏
확실히 기존에는 잘 요청해서 잘 가공하고 그걸 잘 써먹는지에 대한 단위 테스트가 필요했는데
h
API가 좀 맘에 안들 수 있는데 그럼 Jest environment 커스터마이징 하셔서 puppeteer 나 playwright 환경 만들어서 활ㅇ용할 수도 있고
container가 나눠질 때 컨테이너에 로직이 많이 들어가면 테스트 필요할 수는 있는데 보통은 외부 서비스나 훅으로 분리되거나 릴레이처럼 완전 managed 되기도 하니까
유닛테스트는 케바케인듯해요
그니까 예를들어 react-redux 의 mapStateToProps -> container 같은거 생각해보시면
셀렉터를 적절하게 prop 에 매핑해주는데서 역할이 끝나고 세부적인 부분은 각 셀렉터단에서 이미 테스트가 되어 있으니
mapStateToProps 는 타입 에러를 다 잡았다는 전제하에 테스트할게 거의 없죠
ohh 1
(데이터 컨테이너라는 레이어가 분리되었을 때)
실제로 돌려봐도 커버리지 차이도 거의 안날걸요?
아니 정확히는 안나게 만들어야 하죠 ㅋㅋ
아무튼 다시 릴레이로 돌아와서
useFragment 의존성은 역전되어 있어서 실제로 세부 동작은 composition 하는 쿼리 렌더러가 쥐고 있으니
네 뭐 컴포넌트에서 신경쓸 부분은 아닌거같고 그냥 모킹하면 될듯
experimental 얘기를 하셔서 혹시 equiv 이 없나..? 싶어서 찾아보는 중…
😭 1
근데 없더라도 메뉴얼 모킹하는게 크게 어렵진 않ㅇ르거 같긴해요
u
감사합니다. 말씀해주신 내용들은 단위로 꼭 작성해야 할 경우에 해당되는게 맞을까요?
h
내부엔 테스트코드 다 있네요 (몇몇 인터널 패키지 의존성이 보이긴 하지만) 참고해보시면 단위 테스트도 할 수 있을 듯 https://github.com/facebook/relay/blob/master/packages/relay-experimental/__tests__/useFragment-test.js
🤩 1
u
고맙습니다!!
h
근데 저라면 가능한 특정 레이어는 “테스트를 안해도 되도록” 만들려고 노력(발버둥) 해볼 것 같습니다.
u
저도 그쪽으로 생각이 들기 시작했습니다 ㅋㅋㅋ.. 뭔가..
가성비가 안맞는 것 같아요
h
네네
그냥 e2e 잘만드는게 이터레이션 조금 느려도 활용가치는 높아서
아예 서버랑 합심해서 DB까지 묶어서 멱등하게 돌아가는 테스트 배드를 만들어버린다거나 ㅋㅋㅋ
👀 1
코드가 선언적으로 작성될 수록 기계적인 유닛테스트는 가치가 떨어지니 테스트는 통합 테스트 위주로 작성하시는게 나을거고
이거 오해가 있을 것 같아… what/how가 잘 쪼개져있으면 what에 대해서 기계적으로 커버리지를 높이는건 별 의미가 없다는 의미였습니다. (마치 assert A is A 같은…) 애초에 100% 선언적인 코드는 스냅샷만 찍어도 커버리지 100%가 나와요. (브랜치가 하나일 때)
👍 1