@@ -241,6 +241,47 @@ test('assertions in `onRender`', async () => {
241
241
> passed into ` onRender ` of React's ` Profiler ` component, as well as ` snapshot ` ,
242
242
> ` replaceSnapshot ` and ` mergeSnapshot `
243
243
244
+ ### ` expect(...)[.not].toRerender() ` and ` expect(...)[.not].toRenderExactlyTimes(n) `
245
+
246
+ This library adds to matchers to ` expect ` that can be used like
247
+
248
+ ``` tsx
249
+ test (' basic functionality' , async () => {
250
+ const {takeRender} = renderToRenderStream (<RerenderingComponent />)
251
+
252
+ await expect (takeRender ).toRerender ()
253
+ await takeRender ()
254
+
255
+ // trigger a rerender somehow
256
+ await expect (takeRender ).toRerender ()
257
+ await takeRender ()
258
+
259
+ // ensure at the end of a test that no more renders will happen
260
+ await expect (takeRender ).not .toRerender ()
261
+ await expect (takeRender ).toRenderExactlyTimes (2 )
262
+ })
263
+ ```
264
+
265
+ These matchers can be used on multiple different objects:
266
+
267
+ ``` ts
268
+ await expect (takeRender ).toRerender ()
269
+ await expect (renderStream ).toRerender ()
270
+ await expect (takeSnapshot ).toRerender ()
271
+ await expect (snapshotStream ).toRerender ()
272
+ ```
273
+
274
+ > [ !NOTE]
275
+ >
276
+ > By default, ` .toRerender ` and ` toRenderExactlyTimes ` will wait 100ms for
277
+ > renders or to ensure no more renders happens.
278
+ >
279
+ > You can modify that with the ` timeout ` option:
280
+ >
281
+ > ``` js
282
+ > await expect (takeRender).not .toRerender ({timeout: 300 })
283
+ > ` ` `
284
+
244
285
## A note on ` act` .
245
286
246
287
You might want to avoid using this library with ` act` , as ` act`
0 commit comments