1. 현상
(1) 에러 발생
Vitest
환경에서ReactModal
테스트 구동시 발생한다.
[에러 로그]
Error: You must set an element with Modal.setAppElement(el) to make this accessible
setAppElement throws error in tests
Warning: react-modal: App element is not defined
(2) 해결 방법
- 테스트 대상 모달 컴포넌트에서
NODE_ENV
조건문을 추가한다.
// before
ReactModal.setAppElement('#root');
// after - 테스트 환경에서 setAppElement를 실행치 않도록 변경
if (process.env.NODE_ENV !== 'test') ReactModal.setAppElement('#root');
2. 원인
(1) 에러가 발생하는 이유는?
- 테스트 환경에서
ReactModal
컴포넌트 렌더링시 왜 에러가 발생할까? 그 이유는setAppElement
때문! ReactModal.setAppElement
는 모달이 열렸을 때 스크린 리더가 모달 외부의 콘텐츠를 무시하도록 한다.- 하지만 테스트 환경에서는
ReactModal.setAppElement
메서드가 렌더링 대상 요소를 찾지 못한다. - 그래서 “테스트 환경이라면
setAppElement
메서드를 실행하지 않는” 코드가 필요하다.
if (process.env.NODE_ENV !== 'test') ReactModal.setAppElement('#root');
❓ 엥? 그런데 왜 조건을 NODE_ENV !== ‘test’로 설정해야할까?
- 그 이유는 Vitest에서 테스트러너가 구동되는 환경이
NODE_ENV = test
이기 때문이다. (관련 코드) - 테스트 실행 시 별도로
NODE_ENV=test
를 선언하지 않아도, 테스트 러너가 자동으로 이 값을 설정한다. (아래 이미지는 vitest 레포 일부 코드)
3. 결론
✅ 아하!
ReactModal
테스트시Modal.setAppElement(el)
에서 요소를 찾지 못하면, 테스트 환경에서는 해당 함수의 실행을 스킵하면 되는군!
✅ 아하! 테스트 환경에서 어떤 코드를 실행하지 않으려면
process.env.NODE_ENV !== 'test'
를 하면 되겠군!
반응형
'error log' 카테고리의 다른 글
[github Actions] job별로 시간 제한 걸기, timeout-minutes (0) | 2022.11.21 |
---|
댓글