Skip to content

Commit b302933

Browse files
committed
add test for onRender
1 parent 090958a commit b302933

File tree

2 files changed

+63
-1
lines changed

2 files changed

+63
-1
lines changed

src/renderStream/__tests__/createRenderStream.test.tsx

+62
Original file line numberDiff line numberDiff line change
@@ -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+
})

src/renderStream/__tests__/useTrackRenders.test.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ test('specifying the `name` option', async () => {
170170
const {renderedComponents} = await takeRender()
171171
expect(renderedComponents).toEqual([
172172
'NamedComponent:Darth Vader',
173-
// TODO: investigate why the order of sibling components is inverted and if it's technically possible to change that
173+
// this relies on the order of `useLayoutEffect` being executed, we have no way to influence that siblings seem "backwards" here
174174
'NamedComponent:Leia',
175175
'NamedComponent:Luke',
176176
'NamedComponent:R2D2',

0 commit comments

Comments
 (0)