diff --git a/src/Image.tsx b/src/Image.tsx
index 47f71e9..4b88c48 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 0000000..c841a11
--- /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 2126a47..a9d516c 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', () => {