@@ -183,3 +183,65 @@ describe('replaceSnapshot', () => {
183183 } )
184184 } )
185185} )
186+
187+ describe ( 'onRender' , ( ) => {
188+ test ( 'basic functionality' , async ( ) => {
189+ function Counter ( ) {
190+ const [ value , setValue ] = React . useState ( 0 )
191+ replaceSnapshot ( { value} )
192+ return (
193+ < CounterForm value = { value } onIncrement = { ( ) => setValue ( v => v + 1 ) } />
194+ )
195+ }
196+
197+ const { takeRender, replaceSnapshot, render} = createRenderStream < {
198+ value : number
199+ } > ( {
200+ onRender ( info ) {
201+ // can use expect here
202+ expect ( info . count ) . toBe ( info . snapshot . value + 1 )
203+ } ,
204+ } )
205+ const utils = render ( < Counter /> )
206+ const incrementButton = utils . getByText ( 'Increment' )
207+ await userEvent . click ( incrementButton )
208+ await userEvent . click ( incrementButton )
209+ await takeRender ( )
210+ await takeRender ( )
211+ await takeRender ( )
212+ } )
213+
214+ test ( 'errors in `onRender` propagate to the associated `takeRender` call' , async ( ) => {
215+ function Counter ( ) {
216+ const [ value , setValue ] = React . useState ( 0 )
217+ return (
218+ < CounterForm value = { value } onIncrement = { ( ) => setValue ( v => v + 1 ) } />
219+ )
220+ }
221+
222+ const { takeRender, render} = createRenderStream ( {
223+ onRender ( info ) {
224+ expect ( info . count ) . toBe ( 1 )
225+ } ,
226+ } )
227+
228+ const utils = render ( < Counter /> )
229+ const incrementButton = utils . getByText ( 'Increment' )
230+ await userEvent . click ( incrementButton )
231+ await userEvent . click ( incrementButton )
232+ await takeRender ( )
233+ const error = await takeRender ( )
234+ . then ( ( ) => undefined as never )
235+ . catch ( e => e as Error )
236+
237+ // eslint-disable-next-line no-control-regex
238+ const consoleColors = / \x1b \[ \d + m / g
239+
240+ expect ( error . message . replace ( consoleColors , '' ) ) . toMatchInlineSnapshot ( `
241+ expect(received).toBe(expected) // Object.is equality
242+
243+ Expected: 1
244+ Received: 2
245+ ` )
246+ } )
247+ } )
0 commit comments