@@ -2,17 +2,27 @@ import { act, fireEvent, render } from '@testing-library/react';
22import React from 'react' ;
33import Image from '../src' ;
44
5+ global . lastResolve = null ;
6+
57jest . mock ( '../src/util' , ( ) => {
68 const { isImageValid, ...rest } = jest . requireActual ( '../src/util' ) ;
79
810 return {
911 ...rest ,
10- isImageValid : ( ) => Promise . resolve ( false ) ,
12+ isImageValid : ( ) =>
13+ new Promise ( resolve => {
14+ global . lastResolve = resolve ;
15+
16+ setTimeout ( ( ) => {
17+ resolve ( false ) ;
18+ } , 1000 ) ;
19+ } ) ,
1120 } ;
1221} ) ;
1322
1423describe ( 'Fallback' , ( ) => {
1524 beforeEach ( ( ) => {
25+ global . lastResolve = null ;
1626 jest . useFakeTimers ( ) ;
1727 } ) ;
1828
@@ -50,18 +60,19 @@ describe('Fallback', () => {
5060 expect ( document . querySelector ( '.rc-image-preview-img' ) ) . toHaveAttribute ( 'src' , fallback ) ;
5161 } ) ;
5262
53- it ( 'should not show preview' , ( ) => {
63+ it ( 'should not show preview' , async ( ) => {
5464 const { container } = render ( < Image src = "abc" fallback = { fallback } /> ) ;
5565
5666 fireEvent . error ( container . querySelector ( '.rc-image-img' ) ) ;
57- act ( ( ) => {
67+ await act ( async ( ) => {
5868 jest . runAllTimers ( ) ;
69+ await Promise . resolve ( ) ;
5970 } ) ;
6071
6172 expect ( container . querySelector ( '.rc-image-mask' ) ) . toBeFalsy ( ) ;
6273 } ) ;
6374
64- it ( 'should change image, not error' , ( ) => {
75+ it ( 'should change image, not error' , async ( ) => {
6576 const { container, rerender } = render (
6677 < Image
6778 width = { 200 }
@@ -70,18 +81,25 @@ describe('Fallback', () => {
7081 /> ,
7182 ) ;
7283
73- fireEvent . error ( container . querySelector ( '.rc-image-img' ) ) ;
74-
7584 rerender (
7685 < Image
7786 width = { 200 }
7887 src = "https://gw.alipayobjects.com/mdn/rms_08e378/afts/img/A*NZuwQp_vcIQAAAAAAAAAAABkARQnAQ"
7988 fallback = "https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
8089 /> ,
8190 ) ;
82- act ( ( ) => {
91+
92+ // New Image should pass
93+ await act ( async ( ) => {
94+ await global . lastResolve ( true ) ;
95+ } ) ;
96+
97+ // Origin one should failed
98+ await act ( async ( ) => {
8399 jest . runAllTimers ( ) ;
100+ await Promise . resolve ( ) ;
84101 } ) ;
102+
85103 expect ( container . querySelector ( '.rc-image-img' ) ) . toHaveAttribute (
86104 'src' ,
87105 'https://gw.alipayobjects.com/mdn/rms_08e378/afts/img/A*NZuwQp_vcIQAAAAAAAAAAABkARQnAQ' ,
0 commit comments