외부 라이브러리는 어떻게 테스트 코드를 짤까?
CKeditor라는 외부 라이브러리를 사용했는데 이걸 대체 어떻게 테스트 코드를 짜나... 고민했다.
트레이너 님에게 물어보니 외부 라이브러리는 그냥 그 자체에게 맡기고 테스트 코드를 따로 작성하지 않는다고 한다.
그럼 어떻게 mocking을 해 올 수 있을까??
컴포넌트는 결국 함수다
컴포넌트는 결국 함수기 때문에 라이브러리를 불러온 위치를 써주고 jest.fn()으로 정의 내려 주었다.
import { CKEditor } from '@ckeditor/ckeditor5-react';
import ClassicEditor from '@ckeditor/ckeditor5-build-classic';
jest.mock('@ckeditor/ckeditor5-react', () => ({
CKEditor: jest.fn(),
}));
jest.mock('@ckeditor/ckeditor5-build-classic', () => '');
외부 라이브러리가 무엇인지 함부로 속단 말자
그리고 또 배운 것이 있다면 아래처럼 입력하는 곳을 input으로 하여 CKeditor도 똑같이 label을 만들어 id를 넣어 연결해주었다.
그러니 자꾸 테스트 코드에서 오류가 떴는데 트레이너 분 말씀이 이것이 어떻게 input이라고 확신하냐는 것이었다.
그게 그냥 '우연'일뿐이라고 했다.
<div>
<label htmlFor="input-title">제목</label>
<input
id="input-title"
type="text"
name="title"
value={talkFormStore.title}
onChange={(e) => talkFormStore.changeTitle(e.target.value)}
/>
</div>
<div>
<label htmlFor="input-hashTags">해쉬태그</label>
<input
id="input-hashTags"
type="text"
name="hashTags"
value={talkFormStore.hashTags}
onChange={(e) => talkFormStore.changeHashTags(e.target.value)}
/>
</div>
그래서 아래처럼 input과 label 형식을 버리고 div로 묶어주니
<div>내용</div>
<CKEditor
editor={ClassicEditor}
data="<p>Hello from CKEditor 5!</p>"
name="content"
onChange={handleChangeContent}
/>
추가 사항
1. 반드시 테스트 코드를 짤 때는 반드시 다른 테스트들이 전부 통과하게 한 후 작성한다. -> 아니면 어디서 오류가 나거나 의존성이 잘못 주입되었는지 파악할 수가 없다.
2. 모두 통과시키기 어렵다면 통과되지 않는 테스트는 주석 처리한 후 일단 올 그린을 본다.
3. 보고 있는 창은 그때그때 저장 후 종료하여 작업 인지 부하를 줄인다.
위 모두 읽으면 응 당연하지 하지만 지키기 어려운 것들이다.
좋은 습관으로 좋은 코드를 만들자.
'개발 관련 학습 및 문제해결' 카테고리의 다른 글
최소기능만 구현하기[20221112-TIL] (0) | 2022.11.12 |
---|---|
LDD(Logic Driven Development)??[20221111-TIL] (0) | 2022.11.11 |
@ElementCollection , 모델(엔터티)에 List, 배열 넣는 법[20221109 TIL] (0) | 2022.11.09 |
백엔드 Layered Architecture 구조와 모델 설정시 유의할 점[20221108-TIL] (0) | 2022.11.08 |
효율적으로 학습을 하자[메가테라 19주차 주간회고] (0) | 2022.11.07 |
댓글