11import * as React from 'react'
2- import { render , fireEvent } from '@testing-library/react'
2+ import { render , fireEvent , waitFor , act } from '@testing-library/react'
33import '@testing-library/jest-dom'
44
55import { Uploader } from '../uploader'
@@ -275,9 +275,12 @@ test('simulates single file upload', async () => {
275275 } )
276276 const input : any = container . querySelector ( 'input' )
277277
278- await fireEvent . change ( input , { target : { files : [ file ] } } )
279-
280- expect ( handleUpload ) . toHaveBeenCalledTimes ( 1 )
278+ await act ( async ( ) => {
279+ fireEvent . change ( input , { target : { files : [ file ] } } )
280+ } )
281+ await waitFor ( ( ) => {
282+ expect ( handleUpload ) . toHaveBeenCalledTimes ( 1 )
283+ } )
281284 expect ( handleUpload ) . toHaveBeenCalledWith ( file )
282285} )
283286test ( 'simulates single file upload fail' , async ( ) => {
@@ -292,9 +295,12 @@ test('simulates single file upload fail', async () => {
292295 } )
293296 const input : any = container . querySelector ( 'input' )
294297
295- await fireEvent . change ( input , { target : { files : [ file ] } } )
296-
297- expect ( handleUpload ) . toHaveBeenCalledTimes ( 1 )
298+ await act ( async ( ) => {
299+ fireEvent . change ( input , { target : { files : [ file ] } } )
300+ } )
301+ await waitFor ( ( ) => {
302+ expect ( handleUpload ) . toHaveBeenCalledTimes ( 1 )
303+ } )
298304 expect ( handleUpload ) . toHaveBeenCalledWith ( file )
299305 await expect ( handleUpload ( ) ) . rejects . toThrow ( 'Upload failed' )
300306} )
@@ -321,9 +327,12 @@ test('simulates multiple file upload', async () => {
321327 const files = [ file1 , file2 , file3 ]
322328 const input : any = container . querySelector ( 'input' )
323329
324- await fireEvent . change ( input , { target : { files } } )
325-
326- expect ( handleUpload ) . toHaveBeenCalledTimes ( 2 )
330+ await act ( async ( ) => {
331+ fireEvent . change ( input , { target : { files } } )
332+ } )
333+ await waitFor ( ( ) => {
334+ expect ( handleUpload ) . toHaveBeenCalledTimes ( 2 )
335+ } )
327336 expect ( handleOverCount ) . toHaveBeenCalledTimes ( 1 )
328337 expect ( handleOverCount ) . toHaveBeenCalledWith ( 3 )
329338} )
@@ -350,9 +359,13 @@ test('simulates file upload when autoupload is false', async () => {
350359 } )
351360 const files = [ file1 , file2 , file3 ]
352361 const input : any = container . querySelector ( 'input' )
353- await fireEvent . change ( input , { target : { files } } )
362+ await act ( async ( ) => {
363+ fireEvent . change ( input , { target : { files } } )
364+ } )
365+ await waitFor ( ( ) => {
366+ expect ( handleOverCount ) . toHaveBeenCalledTimes ( 1 )
367+ } )
354368 expect ( handleUpload ) . toHaveBeenCalledTimes ( 0 )
355- expect ( handleOverCount ) . toHaveBeenCalledTimes ( 1 )
356369 expect ( handleOverCount ) . toHaveBeenCalledWith ( 3 )
357370} )
358371test ( 'should render button' , ( ) => {
@@ -521,18 +534,30 @@ test('should handle beforeUpload function', async () => {
521534 const input : any = container . querySelector ( 'input' )
522535
523536 // 测试单个 PNG 文件上传
524- await fireEvent . change ( input , { target : { files : [ pngFile ] } } )
525- expect ( beforeUpload ) . toHaveBeenCalledTimes ( 1 )
537+ await act ( async ( ) => {
538+ fireEvent . change ( input , { target : { files : [ pngFile ] } } )
539+ } )
540+ await waitFor ( ( ) => {
541+ expect ( beforeUpload ) . toHaveBeenCalledTimes ( 1 )
542+ } )
526543 expect ( handleUpload ) . toHaveBeenCalledWith ( pngFile )
527544
528545 // 测试单个 JPG 文件被过滤
529- await fireEvent . change ( input , { target : { files : [ jpgFile ] } } )
530- expect ( beforeUpload ) . toHaveBeenCalledTimes ( 2 )
546+ await act ( async ( ) => {
547+ fireEvent . change ( input , { target : { files : [ jpgFile ] } } )
548+ } )
549+ await waitFor ( ( ) => {
550+ expect ( beforeUpload ) . toHaveBeenCalledTimes ( 2 )
551+ } )
531552 expect ( handleUpload ) . not . toHaveBeenCalledWith ( jpgFile )
532553
533554 // 测试多文件上传时的过滤
534- await fireEvent . change ( input , { target : { files : [ pngFile , jpgFile ] } } )
535- expect ( beforeUpload ) . toHaveBeenCalledTimes ( 3 )
555+ await act ( async ( ) => {
556+ fireEvent . change ( input , { target : { files : [ pngFile , jpgFile ] } } )
557+ } )
558+ await waitFor ( ( ) => {
559+ expect ( beforeUpload ) . toHaveBeenCalledTimes ( 3 )
560+ } )
536561 expect ( handleUpload ) . toHaveBeenCalledTimes ( 2 ) // 只有 PNG 文件被上传
537562} )
538563
@@ -552,8 +577,11 @@ test('should handle beforeUpload returning empty array', async () => {
552577 } )
553578
554579 const input : any = container . querySelector ( 'input' )
555- await fireEvent . change ( input , { target : { files : [ file ] } } )
556-
557- expect ( beforeUpload ) . toHaveBeenCalled ( )
580+ await act ( async ( ) => {
581+ fireEvent . change ( input , { target : { files : [ file ] } } )
582+ } )
583+ await waitFor ( ( ) => {
584+ expect ( beforeUpload ) . toHaveBeenCalled ( )
585+ } )
558586 expect ( handleUpload ) . not . toHaveBeenCalled ( )
559587} )
0 commit comments