【发布时间】:2023-03-23 18:20:01
【问题描述】:
这就是我在useEffect 钩子中的函数的外观:
useEffect(() => {
const getImages = async () => {
try {
setIsLoading(true);
const response = await fetch(GET_RECENT_IMAGES_API_URL(pageNumber));
if (!response.ok) {
throw new Error("Network response was not ok");
}
const imageData = await response.json();
setIsLoading(false);
const appImaegDataArray: CoreImageData[] = imageData.photos.photo.map(
(image: ResponseImageData) => {
const { id, server, secret, title, ownername } = image;
const coreImageDataObj: CoreImageData = {
id,
server,
secret,
title,
ownername,
isFavorite: checkIfFavorited(id),
};
return coreImageDataObj;
}
);
setAllImages((prevAllImagesState) => {
const newestImagesArray = [
...prevAllImagesState,
...appImaegDataArray,
];
return getUniqueImagesArray(newestImagesArray);
});
setHasMore(imageData.photos.pages > pageNumber);
} catch (error) {
console.error(error);
setIsLoading(false);
}
};
getImages();
// eslint-disable-next-line
}, [pageNumber]);
这是我模拟请求的方法:
global.fetch = jest.fn(() =>
Promise.resolve({
json: () =>
Promise.resolve({
photos: {
pages: 10,
photo: [
{
id: "51159068217",
owner: "50123236@N03",
secret: "dda285148c",
server: "65535",
farm: 66,
title: "Blythe a Day May 5–Magical",
ispublic: 1,
isfriend: 0,
isfamily: 0,
},
],
},
}),
})
) as jest.Mock;
describe("<ImageList />", () => {
it("loads all images on mount", async () => {
render(<ImageList isViewFavoriteImages={false} />);
await waitFor(() =>
expect(screen.getByText("Blythe a Day May 5–Magical")).toBeInTheDocument()
);
});
});
但是,执行此操作时,我收到错误并且测试失败。这是失败测试的输出:
修复测试的最佳方法是什么?
【问题讨论】:
标签: reactjs jestjs react-testing-library