반응 후크를 테스트하는 방법 ... 반응 후크를 테스트하지 않음으로써
5748 단어 javascripttestingreact
내 구성 요소가 작성되어 있고 다음과 같이 useEffect 후크를 사용하여 내 API의 일부 메시지를 업데이트한다고 가정해 보겠습니다.
useEffect(() => {
if (data) {
const messagesToUpdate = getAllMessagesToUpdate(data);
messagesToUpdate &&
messagesToUpdate.forEach(edge => {
updateMessage({
variables: {
UpdateMessageInput: {
id: edge.node.id,
read: true,
},
},
});
});
}
}, [data, updateMessage]);
이 호출의 각 순열을 어떻게 테스트합니까? useEffect가 호출될 때마다 이 메시지가 예상대로 작동하는지 확인할 수 있도록 렌더링 주기를 조롱해야 합니다.
여기 대안이 있습니다. useEffect 호출을 자체 후크로 추상화하고 기능을 별도의 함수로 추상화합니다.
// in my main component
useUpdateMessages(data, updateMessage);
// in my hook
export function useUpdateMessages(data, updateMessage) {
useEffect(() => {
updateMessages(data, updateMessage);
}, [data, updateMessage]);
}
// in my standalone function
export function updateMessages(data, updateMessage) {
if (data) {
const messagesToUpdate = getAllMessagesToUpdate(data);
messagesToUpdate &&
messagesToUpdate.forEach(edge => {
updateMessage({
variables: {
UpdateMessageInput: {
id: edge.node.id,
read: true,
},
},
});
});
}
}
이제 React 수명 주기 방법에 대해 걱정할 필요가 없습니다. 내가 원하면 내 후크를 테스트할 수 있지만 여기에서는 거의 가치가 없어 보입니다. 내가 원한다면 react-hooks-testing-library을 사용하여 그렇게하는 것이 더 쉬울 것입니다.
또한 독립 실행형 기능을 테스트하는 것에 대해서만 걱정하면 됩니다. 이제 React의 내부 메커니즘에서 분리되어 훨씬 더 쉽게 수행할 수 있습니다.
나는 이 접근 방식을 아주 좋아한다. 사용 중인 프레임워크에서 코드를 분리합니다. 움직이는 부분이 더 많더라도 훨씬 더 쉬운 테스트와 훨씬 더 깔끔한 코드를 용이하게 할 수 있습니다.
이 아이디어에 대한 내 동료 Stuart Nichols에게 감사합니다!
Reference
이 문제에 관하여(반응 후크를 테스트하는 방법 ... 반응 후크를 테스트하지 않음으로써), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/endymion1818/how-to-test-react-hooks-by-not-testing-react-hooks-37j5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)