React native React本机测试框架由DONS&x27;找不到并等待它';等不及了
这是一个图像库,我相信它工作正常。它在模拟器中运行良好。我尝试过同一测试的不同版本:React native React本机测试框架由DONS&x27;找不到并等待它';等不及了,react-native,testing,jestjs,react-native-testing-library,React Native,Testing,Jestjs,React Native Testing Library,这是一个图像库,我相信它工作正常。它在模拟器中运行良好。我尝试过同一测试的不同版本: test('main image should display', async () => { const { findByTestId } = render(<ImageGallery images={images} />); const mainImage = await findByTestId('largeImage'); expect(mainImage).
test('main image should display', async () => {
const { findByTestId } = render(<ImageGallery images={images} />);
const mainImage = await findByTestId('largeImage');
expect(mainImage).toBeDefined();
});
test('main image should display',async()=>{
const{findByTestId}=render();
const main image=wait findByTestId('largeImage');
expect(main image).toBeDefined();
});
及
test('main image should display',async()=>{
const{getByTestId}=render();
等待等待(()=>{
expect(getByTestId('largeImage')).toBeDefined();
});
});
在这两种情况下,测试都失败:无法在未安装的组件上找到节点
在我的tsx文件中,我有一个useEffect钩子,可以在显示之前预加载所有图像。然后更新状态(这会导致另一个不相关的问题)
//在初始组件渲染后缓存库中的所有图像
useffect(()=>{
如果(!imagesrady){
const loadeImage:Array=images.map((image)=>{
返回Image.prefetch(Image.url);
});
Promise.all(LoadeImage)。然后((imageLoadStatus)=>{
//过滤掉所有未正确加载的图像
images=images.filter((u,index)=>imageLoadStatus[index]);
setActiveImage(图像[0]);
setImagesReady(真);
});
}
});
然后作为回报:
// Render either loading indicator or image gallery conditionally.
if (!imagesReady) {
return (
<Container>
<ActivityIndicator size="small" color="#202020" testID="loading" />
</Container>
);
}
return (
<Container testID="galleryWrapper">
<LargeImage source={{ uri: activeImage.url }} testID="largeImage" />
<ThumbnailList
horizontal
data={images}
renderItem={thumbnail}
keyExtractor={(image) => image.id}
showsHorizontalScrollIndicator={false}
/>
</Container>
);
//有条件地呈现加载指示器或图像库。
如果(!imagesrady){
返回(
);
}
返回(
image.id}
showshorizontalscrolindicator={false}
/>
);
正如我所说,代码在模拟器中运行良好,加载不到4.5秒。建议?对于将来发现这一点的人。。。问题在于: 预取(Image.url) 即使我使用内联数据(与web服务器上托管的图像相反)进行测试,Jest仍然存在解决此问题的问题。我通过模仿Image.prefetch修复了它
// Cache all images in the gallery after initial component render
useEffect(() => {
if (!imagesReady) {
const loadedImages: Array<Promise<boolean>> = images.map((image) => {
return Image.prefetch(image.url);
});
Promise.all(loadedImages).then((imageLoadStatus) => {
// Filter out any images that didn't properly load
images = images.filter((_, index) => imageLoadStatus[index]);
setActiveImage(images[0]);
setImagesReady(true);
});
}
});
// Render either loading indicator or image gallery conditionally.
if (!imagesReady) {
return (
<Container>
<ActivityIndicator size="small" color="#202020" testID="loading" />
</Container>
);
}
return (
<Container testID="galleryWrapper">
<LargeImage source={{ uri: activeImage.url }} testID="largeImage" />
<ThumbnailList
horizontal
data={images}
renderItem={thumbnail}
keyExtractor={(image) => image.id}
showsHorizontalScrollIndicator={false}
/>
</Container>
);