@@ -183,3 +183,65 @@ describe('replaceSnapshot', () => {
183
183
} )
184
184
} )
185
185
} )
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