From 3d2d9e3e762b45e39697c9ab145688e2847e62fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8C=E8=B4=A7=E6=9C=BA=E5=99=A8=E4=BA=BA?= Date: Wed, 28 Jun 2023 20:49:03 +0800 Subject: [PATCH] test: update test case --- src/Image.tsx | 10 +--------- src/util.ts | 8 ++++++++ tests/fallback.test.tsx | 23 ++++++++++++++--------- 3 files changed, 23 insertions(+), 18 deletions(-) create mode 100644 src/util.ts diff --git a/src/Image.tsx b/src/Image.tsx index 47f71e95..4b88c485 100644 --- a/src/Image.tsx +++ b/src/Image.tsx @@ -13,6 +13,7 @@ import type { ImageElementProps } from './interface'; import type { PreviewProps, ToolbarRenderInfoType } from './Preview'; import Preview from './Preview'; import PreviewGroup from './PreviewGroup'; +import { isImageValid } from './util'; export interface ImagePreviewType extends Omit< @@ -66,15 +67,6 @@ interface CompoundedComponent

extends React.FC

{ type ImageStatus = 'normal' | 'error' | 'loading'; -function isImageValid(src) { - return new Promise(resolve => { - const img = document.createElement('img'); - img.onerror = () => resolve(false); - img.onload = () => resolve(true); - img.src = src; - }); -} - const ImageInternal: CompoundedComponent = props => { const { src: imgSrc, diff --git a/src/util.ts b/src/util.ts new file mode 100644 index 00000000..c841a112 --- /dev/null +++ b/src/util.ts @@ -0,0 +1,8 @@ +export function isImageValid(src: string) { + return new Promise(resolve => { + const img = document.createElement('img'); + img.onerror = () => resolve(false); + img.onload = () => resolve(true); + img.src = src; + }); +} diff --git a/tests/fallback.test.tsx b/tests/fallback.test.tsx index 2126a47c..a9d516c9 100644 --- a/tests/fallback.test.tsx +++ b/tests/fallback.test.tsx @@ -1,7 +1,16 @@ +import { act, fireEvent, render } from '@testing-library/react'; import React from 'react'; -import { render, fireEvent, act } from '@testing-library/react'; import Image from '../src'; +jest.mock('../src/util', () => { + const { isImageValid, ...rest } = jest.requireActual('../src/util'); + + return { + ...rest, + isImageValid: () => Promise.resolve(false), + }; +}); + describe('Fallback', () => { beforeEach(() => { jest.useFakeTimers(); @@ -13,19 +22,15 @@ describe('Fallback', () => { const fallback = 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png'; - it('Fallback correct', () => { + it('Fallback correct', async () => { const { container } = render(); - act(() => { - jest.runAllTimers(); - }); - - fireEvent.click(container.querySelector('.rc-image')); - act(() => { + await act(async () => { jest.runAllTimers(); + await Promise.resolve(); }); - expect(container.querySelector('.rc-image-preview')).toBeFalsy(); + expect(container.querySelector('img').src).toEqual(fallback); }); it('should not show preview', () => {