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>
  );