11/* eslint-disable @typescript-eslint/no-unnecessary-condition */
22import { EventEmitter } from 'node:events'
33import { describe , test , expect } from '@jest/globals'
4- import { createRenderStream } from '@testing-library/react-render-stream'
4+ import {
5+ createRenderStream ,
6+ renderHookToSnapshotStream ,
7+ } from '@testing-library/react-render-stream'
58import * as React from 'react'
69import {
710 RenderStreamMatchers ,
811 toRenderExactlyTimes ,
912 toRerender ,
1013} from '../renderStreamMatchers.js'
1114import { getExpectErrorMessage } from '../../__testHelpers__/getCleanedErrorMessage.js'
15+ import { withDisabledActWarnings } from '../../__testHelpers__/withDisabledActWarnings.js'
1216
1317expect . extend ( {
1418 toRerender,
@@ -25,21 +29,20 @@ const testEvents = new EventEmitter<{
2529 rerender : [ ]
2630} > ( )
2731
28- function RerenderingComponent ( ) {
32+ function useRerender ( ) {
2933 const [ , rerender ] = React . useReducer ( c => c + 1 , 0 )
3034 React . useEffect ( ( ) => {
31- function cb ( ) {
32- const anyThis = globalThis as any as { IS_REACT_ACT_ENVIRONMENT ?: boolean }
33- const prev = anyThis . IS_REACT_ACT_ENVIRONMENT
34- anyThis . IS_REACT_ACT_ENVIRONMENT = false
35- rerender ( )
36- anyThis . IS_REACT_ACT_ENVIRONMENT = prev
37- }
35+ const cb = ( ) => void withDisabledActWarnings ( rerender )
36+
3837 testEvents . addListener ( 'rerender' , cb )
3938 return ( ) => {
4039 testEvents . removeListener ( 'rerender' , cb )
4140 }
4241 } , [ ] )
42+ }
43+
44+ function RerenderingComponent ( ) {
45+ useRerender ( )
4346 return null
4447}
4548
@@ -58,6 +61,46 @@ describe('toRerender', () => {
5861 await expect ( takeRender ) . not . toRerender ( )
5962 } )
6063
64+ test ( 'works with renderStream object' , async ( ) => {
65+ const renderStream = createRenderStream ( { } )
66+
67+ renderStream . render ( < RerenderingComponent /> )
68+ await expect ( renderStream ) . toRerender ( )
69+ await renderStream . takeRender ( )
70+
71+ testEvents . emit ( 'rerender' )
72+ await expect ( renderStream ) . toRerender ( )
73+ await renderStream . takeRender ( )
74+
75+ await expect ( renderStream ) . not . toRerender ( )
76+ } )
77+
78+ test ( 'works with takeSnapshot function' , async ( ) => {
79+ const { takeSnapshot} = renderHookToSnapshotStream ( ( ) => useRerender ( ) )
80+
81+ await expect ( takeSnapshot ) . toRerender ( )
82+ await takeSnapshot ( )
83+
84+ testEvents . emit ( 'rerender' )
85+ await expect ( takeSnapshot ) . toRerender ( )
86+ await takeSnapshot ( )
87+
88+ await expect ( takeSnapshot ) . not . toRerender ( )
89+ } )
90+
91+ test ( 'works with snapshotStream' , async ( ) => {
92+ const snapshotStream = renderHookToSnapshotStream ( ( ) => useRerender ( ) )
93+
94+ await expect ( snapshotStream ) . toRerender ( )
95+ await snapshotStream . takeSnapshot ( )
96+
97+ testEvents . emit ( 'rerender' )
98+ await expect ( snapshotStream ) . toRerender ( )
99+ await snapshotStream . takeSnapshot ( )
100+
101+ await expect ( snapshotStream ) . not . toRerender ( )
102+ } )
103+
61104 test ( "errors when it rerenders, but shouldn't" , async ( ) => {
62105 const { takeRender, render} = createRenderStream ( { } )
63106
@@ -102,6 +145,29 @@ describe('toRenderExactlyTimes', () => {
102145 await expect ( takeRender ) . toRenderExactlyTimes ( 2 )
103146 } )
104147
148+ test ( 'works with renderStream object' , async ( ) => {
149+ const renderStream = createRenderStream ( { } )
150+
151+ renderStream . render ( < RerenderingComponent /> )
152+ testEvents . emit ( 'rerender' )
153+
154+ await expect ( renderStream ) . toRenderExactlyTimes ( 2 )
155+ } )
156+
157+ test ( 'works with takeSnapshot function' , async ( ) => {
158+ const { takeSnapshot} = renderHookToSnapshotStream ( ( ) => useRerender ( ) )
159+ testEvents . emit ( 'rerender' )
160+
161+ await expect ( takeSnapshot ) . toRenderExactlyTimes ( 2 )
162+ } )
163+
164+ test ( 'works with snapshotStream' , async ( ) => {
165+ const snapshotStream = renderHookToSnapshotStream ( ( ) => useRerender ( ) )
166+ testEvents . emit ( 'rerender' )
167+
168+ await expect ( snapshotStream ) . toRenderExactlyTimes ( 2 )
169+ } )
170+
105171 test ( 'errors when the count of rerenders is wrong' , async ( ) => {
106172 const { takeRender, render} = createRenderStream ( { } )
107173
0 commit comments