Skip to content

Commit f54ab74

Browse files
committed
basic matcher tests
1 parent b302933 commit f54ab74

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
2+
import {EventEmitter} from 'node:events'
3+
import {describe, test, expect} from '@jest/globals'
4+
import {createRenderStream} from '@testing-library/react-render-stream'
5+
import * as React from 'react'
6+
import {
7+
RenderStreamMatchers,
8+
toRenderExactlyTimes,
9+
toRerender,
10+
} from '../renderStreamMatchers.js'
11+
12+
expect.extend({
13+
toRerender,
14+
toRenderExactlyTimes,
15+
})
16+
17+
declare module 'expect' {
18+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
19+
interface Matchers<R extends void | Promise<void>, T = unknown>
20+
extends RenderStreamMatchers<R, T> {}
21+
}
22+
23+
const testEvents = new EventEmitter<{
24+
rerender: []
25+
}>()
26+
27+
function RerenderingComponent() {
28+
const [, rerender] = React.useReducer(c => c + 1, 0)
29+
React.useEffect(() => {
30+
function cb() {
31+
const anyThis = globalThis as any as {IS_REACT_ACT_ENVIRONMENT?: boolean}
32+
const prev = anyThis.IS_REACT_ACT_ENVIRONMENT
33+
anyThis.IS_REACT_ACT_ENVIRONMENT = false
34+
rerender()
35+
anyThis.IS_REACT_ACT_ENVIRONMENT = prev
36+
}
37+
testEvents.addListener('rerender', cb)
38+
return () => {
39+
testEvents.removeListener('rerender', cb)
40+
}
41+
}, [])
42+
return null
43+
}
44+
45+
describe('toRerender', () => {
46+
test('basic functionality', async () => {
47+
const {takeRender, render} = createRenderStream({})
48+
49+
render(<RerenderingComponent />)
50+
await expect(takeRender).toRerender()
51+
await takeRender()
52+
53+
testEvents.emit('rerender')
54+
await expect(takeRender).toRerender()
55+
await takeRender()
56+
57+
await expect(takeRender).not.toRerender()
58+
})
59+
})
60+
61+
describe('toRenderExactlyTimes', () => {
62+
test('basic functionality', async () => {
63+
const {takeRender, render} = createRenderStream({})
64+
65+
render(<RerenderingComponent />)
66+
testEvents.emit('rerender')
67+
68+
await expect(takeRender).toRenderExactlyTimes(2)
69+
})
70+
})

0 commit comments

Comments
 (0)