Skip to content

Commit 0cf8f41

Browse files
committed
undo renderToRenderStream changes
1 parent 200d9d2 commit 0cf8f41

File tree

3 files changed

+31
-21
lines changed

3 files changed

+31
-21
lines changed

README.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,16 @@ const utils = await render(<Component />, options)
7070
you can also call
7171

7272
```js
73-
const {takeRender, utils} = await renderToRenderStream(
74-
<Component />,
75-
combinedOptions,
76-
)
73+
const renderStream = renderToRenderStream(<Component />, combinedOptions)
74+
// if required
75+
const utils = await renderStream.renderResultPromise
7776
```
7877

78+
This might be shorter (especially in cases where you don't need to access
79+
`utils`), but keep in mind that the render is executed **asynchronously** after
80+
calling `renderToRenderStream`, and that you need to `await renderResultPromise`
81+
if you need access to `utils` as returned by `render`.
82+
7983
### `renderHookToSnapshotStream`
8084

8185
Usage is very similar to RTL's `renderHook`, but you get a `snapshotStream`

src/__tests__/renderToRenderStream.test.tsx

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import {describe, test, expect} from '@jest/globals'
33
import {renderToRenderStream} from '@testing-library/react-render-stream'
44
import {userEvent} from '@testing-library/user-event'
55
import * as React from 'react'
6-
76
function CounterForm({
87
value,
98
onIncrement,
@@ -33,9 +32,13 @@ describe('snapshotDOM', () => {
3332
)
3433
}
3534

36-
const {takeRender, utils} = await renderToRenderStream(<Counter />, {
37-
snapshotDOM: true,
38-
})
35+
const {takeRender, renderResultPromise} = renderToRenderStream(
36+
<Counter />,
37+
{
38+
snapshotDOM: true,
39+
},
40+
)
41+
const utils = await renderResultPromise
3942
const incrementButton = utils.getByText('Increment')
4043
await userEvent.click(incrementButton)
4144
await userEvent.click(incrementButton)
@@ -65,10 +68,14 @@ describe('snapshotDOM', () => {
6568
return null
6669
},
6770
}
68-
const {takeRender, utils} = await renderToRenderStream(<Component />, {
69-
queries,
70-
snapshotDOM: true,
71-
})
71+
const {takeRender, renderResultPromise} = renderToRenderStream(
72+
<Component />,
73+
{
74+
queries,
75+
snapshotDOM: true,
76+
},
77+
)
78+
const utils = await renderResultPromise
7279
expect(utils.foo()).toBe(null)
7380
const {withinDOM} = await takeRender()
7481
expect(withinDOM().foo()).toBe(null)

src/renderToRenderStream.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ export interface RenderStreamWithRenderResult<
1818
Snapshot extends ValidSnapshot = void,
1919
Q extends Queries = SyncQueries,
2020
> extends RenderStream<Snapshot, Q> {
21-
utils: AsyncRenderResult<Q>
21+
renderResultPromise: Promise<AsyncRenderResult<Q>>
2222
}
2323

2424
/**
2525
* Render into a container which is appended to document.body. It should be used with cleanup.
2626
*/
27-
export async function renderToRenderStream<
27+
export function renderToRenderStream<
2828
Snapshot extends ValidSnapshot = void,
2929
Q extends Queries = SyncQueries,
3030
>(
@@ -37,20 +37,19 @@ export async function renderToRenderStream<
3737
queries,
3838
...options
3939
}: RenderOptions<Snapshot, Q> = {},
40-
): Promise<RenderStreamWithRenderResult<Snapshot, Q>> {
40+
): RenderStreamWithRenderResult<Snapshot, Q> {
4141
const {render, ...stream} = createRenderStream<Snapshot, Q>({
4242
onRender,
4343
snapshotDOM,
4444
initialSnapshot,
4545
skipNonTrackingRenders,
4646
queries,
4747
})
48-
49-
// We need to wait a tick before calling `render` here, because the definition of `ui`
48+
// `render` needs to be called asynchronously here, because the definition of `ui`
5049
// might contain components that reference the return value of `renderToRenderStream`
5150
// itself, e.g. `replaceSnapshot` or `mergeSnapshot`.
52-
await Promise.resolve()
53-
const utils = await render<Q>(ui, {...options, queries})
54-
55-
return {...stream, utils}
51+
const renderResultPromise = Promise.resolve().then(() =>
52+
render<Q>(ui, {...options, queries}),
53+
)
54+
return {...stream, renderResultPromise}
5655
}

0 commit comments

Comments
 (0)