1
- import { renderHook , waitFor } from "@testing-library/react" ;
1
+ import "@testing-library/jest-dom" ;
2
+ import { renderHook , waitFor , render , screen } from "@testing-library/react" ;
2
3
import { StrictMode } from "react" ;
3
4
import { act } from "react" ;
4
5
import useAsyncQueue from "./dist/use-async-queue" ;
6
+ import { Component } from "./component" ;
5
7
6
8
describe ( "useAsyncQueue" , ( ) => {
7
9
describe ( "real timers" , ( ) => {
@@ -279,13 +281,14 @@ describe("useAsyncQueue", () => {
279
281
expect ( result . current . stats . numInFlight ) . toBe ( 2 ) ;
280
282
expect ( inflight ) . toHaveBeenCalledTimes ( 2 ) ;
281
283
expect ( done ) . toHaveBeenCalledTimes ( 0 ) ;
284
+
282
285
jest . advanceTimersByTime ( 900 ) ;
283
286
expect ( done ) . not . toHaveBeenCalled ( ) ;
284
287
expect ( result . current . stats . numInFlight ) . toBe ( 2 ) ;
285
288
expect ( result . current . stats . numPending ) . toBe ( 0 ) ;
286
289
expect ( result . current . stats . numDone ) . toBe ( 0 ) ;
287
- jest . advanceTimersByTime ( 100 ) ;
288
290
291
+ jest . advanceTimersByTime ( 100 ) ;
289
292
await waitFor ( ( ) => {
290
293
expect ( done ) . toHaveBeenCalledTimes ( 2 ) ;
291
294
expect ( result . current . stats . numInFlight ) . toBe ( 0 ) ;
@@ -294,4 +297,25 @@ describe("useAsyncQueue", () => {
294
297
} ) ;
295
298
} ) ;
296
299
} ) ;
300
+
301
+ describe ( "on mount" , ( ) => {
302
+ it ( "should execute each task once" , async ( ) => {
303
+ render ( < Component /> , {
304
+ wrapper : StrictMode ,
305
+ } ) ;
306
+
307
+ expect ( screen . getByText ( "total: 3" ) ) ;
308
+ await waitFor ( ( ) => {
309
+ expect ( screen . queryAllByText ( / i t e m d o n e / ) ) . toHaveLength ( 1 ) ;
310
+ } ) ;
311
+ await waitFor ( ( ) => {
312
+ expect ( screen . queryAllByText ( / i t e m d o n e / ) ) . toHaveLength ( 2 ) ;
313
+ } ) ;
314
+ await waitFor ( ( ) => {
315
+ expect ( screen . queryAllByText ( / i t e m d o n e / ) ) . toHaveLength ( 3 ) ;
316
+ } ) ;
317
+ expect ( screen . queryAllByText ( / i t e m d o n e / ) ) . not . toHaveLength ( 4 ) ;
318
+ expect ( screen . getByText ( "total: 3" ) ) ;
319
+ } ) ;
320
+ } ) ;
297
321
} ) ;
0 commit comments