반응형
사용자 지정 후크 반환 값을 시뮬레이션하려면 어떻게 해야 합니다.
커스텀 훅은 다음과 같습니다.
export function useClientRect() {
const [scrollH, setScrollH] = useState(0);
const [clientH, setClientH] = useState(0);
const ref = useCallback(node => {
if (node !== null) {
setScrollH(node.scrollHeight);
setClientH(node.clientHeight);
}
}, []);
return [scrollH, clientH, ref];
}
}
나는 그것이 불려질 때마다 나의 가치를 돌려주길 원한다.예를 들어 다음과 같습니다.
jest.mock('useClientRect', () => [300, 200, () => {}]);
어떻게 하면 좋을까요?
후크를 모듈로 장착합니다.다음으로 모듈을 조롱합니다.
jest.mock('module_name', () => ({
useClientRect: () => [300, 200, jest.fn()]
}));
mock은 test fn 밖의 파일 위에 호출해야 합니다.따라서 하나의 어레이만 조롱값으로 사용할 수 있습니다.
다른 테스트에서 다른 값을 사용하여 후크를 조롱하는 경우:
import * as hooks from 'module_name';
it('a test', () => {
jest.spyOn(hooks, 'useClientRect').mockImplementation(() => ([100, 200, jest.fn()]));
//rest of the test
});
이 답변에 추가되는 것은, 유저에 대해서,TS2339: Property 'mockReturnValue' does not exist on type
에러 메시지이제 농담거리가 생겼다.Disculed Type defs(ts-jest/utils 포트)를 사용하여 시뮬레이션할 수 있는 함수mocked
기능).
import useClientRect from './path/to/useClientRect';
jest.mock('./path/to/useClientRect');
const mockUseClientRect = useClientRect as jest.MockedFunction<typeof useClientRect>
describe("useClientRect", () => {
it("mocks the hook's return value", () => {
mockUseClientRect.mockReturnValue([300, 200, () => {}]);
// ... do stuff
});
it("mocks the hook's implementation", () => {
mockUseClientRect.mockImplementation(() => [300, 200, () => {}]);
// ... do stuff
});
});
음, 이것은 꽤 까다롭고 때때로 개발자들은 도서관으로 인해 혼란스러워 하지만 익숙해지면 그것은 식은 죽 먹기이다.몇 시간 전에 비슷한 문제에 직면했습니다.솔루션을 공유하면 쉽게 솔루션을 쉽게 도출할 수 있습니다.
커스텀 훅:
import { useEffect, useState } from "react";
import { getFileData } from "../../API/gistsAPIs";
export const useFilesData = (fileUrl: string) => {
const [fileData, setFileData] = useState<string>("");
const [loading, setLoading] = useState<boolean>(false);
useEffect(() => {
setLoading(true);
getFileData(fileUrl).then((fileContent) => {
setFileData(fileContent);
setLoading(false);
});
}, [fileUrl]);
return { fileData, loading };
};
내 모의 코드:테스트 기능 이외의 테스트 파일에 이 모크를 포함시켜 주세요.주의: mock의 반환 객체는 예상된 응답과 일치하므로 주의하십시오.
const mockResponse = {
fileData: "This is a mocked file",
loading: false,
};
jest.mock("../fileView", () => {
return {
useFilesData: () => {
return {
fileData: "This is a mocked file",
loading: false,
};
},
};
});
완전한 테스트 파일은 다음과 같습니다.
import { render, screen, waitFor } from "@testing-library/react";
import "@testing-library/jest-dom/extend-expect";
import FileViewer from "../FileViewer";
const mockResponse = {
fileData: "This is a mocked file",
loading: false,
};
jest.mock("../fileView", () => {
return {
useFilesData: () => {
return {
fileData: "This is a mocked file",
loading: false,
};
},
};
});
describe("File Viewer", () => {
it("display the file heading", async () => {
render(<FileViewer fileUrl="" filename="regex-tutorial.md" className="" />);
const paragraphEl = await screen.findByRole("fileHeadingDiplay");
expect(paragraphEl).toHaveTextContent("regex-tutorial.md");
});
}
언급URL : https://stackoverflow.com/questions/60270013/how-to-mock-react-custom-hook-returned-value
반응형
'programing' 카테고리의 다른 글
org.springframework.cglib.core의 반사 액세스가 잘못되었습니다.리플렉트유틸스$1 (0) | 2023.04.02 |
---|---|
'java.time' 인스턴스를 생성할 수 없습니다.LocalDate' - 스프링부츠, 엘라스틱시치, 잭슨 (0) | 2023.04.02 |
Spring Boot 로고를 Nyan Cat으로 변경하는 방법 (0) | 2023.04.02 |
ng-click을 사용하여 어레이에서 아이템 또는 오브젝트를 삭제하려면 어떻게 해야 합니까? (0) | 2023.04.02 |
jQuery.easing[j]Query.easing.def]가 함수가 아닙니다. (0) | 2023.04.02 |