반응형
반응 후크 - 여러 가지 사용 상태 후크를 테스트하는 방법
주 후크가 거의 없는 구성 요소가 있음:
const [resizing, setResizing] = React.useState(false);
const [x, setX] = React.useState(0);
const [y, setY] = React.useState(0);
그리고 어떤 곳에서는 한 번에 두 개 이상의 갈고리를 부르고 있다. 예를 들어, 여기에서는onResize
, 나는 둘 다에게 전화한다.setResizing
그리고setX
또는setY
훅:
<ResizableBox
height={520}
width={370}
minConstraints={[370, 520]}
maxConstraints={[Infinity, Infinity]}
className={classes.resizable}
onResize={(e) => {
if (e.movementX !== 0) {
setResizing(true);
setX((prev) => prev + e.movementX);
} else if (e.movementY !== 0) {
setResizing(true);
setY((prev) => prev + e.movementY / 2);
}
}}
onResizeStop={() => {
setResizing(false);
}}
>
나는 상태 변화를 테스트하기 쉬운 클래스 구성요소를 테스트하는 것에 익숙하다.
다음과 같은 방법으로 테스트해 보고자 한다.
const setXSpy = jest.spyOn(React, 'setX');
const setYSpy = jest.spyOn(React, 'setY');
const setResizeSpy = jest.spyOn(React, 'setResize');
it('calls useState hooks correctly', () => {
resizableBox.props.onResize({movementX: 1});
expect(setXSpy).toHaveBeenCalledWith(1);
expect(setYSpy).not.toHaveBeenCalled();
expect(setResizeSpy).toHaveBeenCalledWith(true);
});
하지만 이 예에서 테스트 후크는 어떻게 생겼는지 잘 모르겠어.
당신은 좋은 아이디어가 아닌 그 요소의 구현 세부사항을 테스트하고 있다. (당신은 기본적으로 그 구현에 테스트를 결합하는 것이지, 그 구성 요소가 무엇을 해야 하는지를 결정하기 위해 테스트를 사용하는 것이 아니다.)
대신 사용자처럼 구성 요소를 테스트하여 출력이 올바른지 확인하는 방법을 찾아보겠다.
먼저 테스트 라이브러리를 통합한 다음 여기에 설명된 패턴을 따르십시오.
문제는, 뭘 시험하려는 거야?이 테스트의 예상 결과는 무엇이며 어떤 행동을 포함할 것인가?
LE: 당신의 경우, 리액션 가능 여부를 테스트하려고 하는 것으로 보아, 다음 작업을 시도해 보십시오.mouseDown
크기 조정 핸들에 놓고 방출한다.mouseMove
그리고mouseUp
올바른 일이 발생하는지(코드로부터 상태 값을 사용하여 무엇을 하고 있는지, 무엇을 위해 사용하고 있는지 알 수 없음)
참조URL: https://stackoverflow.com/questions/63825638/react-hooks-how-to-test-multiple-usestate-hooks
반응형
'Programing' 카테고리의 다른 글
(vue 구성 요소 대신) javascript 파일에서 vuex 상태를 가져오는 방법 (0) | 2022.04.02 |
---|---|
typecript에서 markdown(.md) 파일을 가져오는 방법 (0) | 2022.04.02 |
"Uncaught TypeError: 정의되지 않은 속성 '유형'을 읽을 수 없으며, 관련 내용이 명확하지 않음 (0) | 2022.04.02 |
사용 중지 경고:태핑 가능.플러그인이 더 이상 사용되지 않음..hooks에 새 API를 대신 사용 (0) | 2022.04.02 |
Redex 및 라우터 - 서버 렌더링으로 응답 (0) | 2022.04.02 |