Skip to content

Commit ca944cd

Browse files
committed
less intrusive method
1 parent 0167414 commit ca944cd

File tree

2 files changed

+46
-7
lines changed

2 files changed

+46
-7
lines changed

src/__tests__/renderHookToSnapshotStream.test.tsx

+39-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
import {EventEmitter} from 'node:events'
44
import {scheduler} from 'node:timers/promises'
55
import {test, expect} from '@jest/globals'
6-
import {renderHookToSnapshotStream} from '@testing-library/react-render-stream'
6+
import {
7+
renderHookToSnapshotStream,
8+
SnapshotStream,
9+
} from '@testing-library/react-render-stream'
710
import * as React from 'react'
811

912
const testEvents = new EventEmitter<{
@@ -72,3 +75,38 @@ test.each<[type: string, initialValue: unknown, ...nextValues: unknown[]]>([
7275
expect(await takeSnapshot()).toBe(nextValue)
7376
}
7477
})
78+
79+
test.skip('type test: render function without an argument -> no argument required for `rerender`', async () => {
80+
{
81+
// prop type has nothing to infer on - defaults to `void`
82+
const stream = await renderHookToSnapshotStream(() => {})
83+
const _test1: SnapshotStream<void, void> = stream
84+
// @ts-expect-error should not be assignable
85+
const _test2: SnapshotStream<void, string> = stream
86+
await stream.rerender()
87+
// @ts-expect-error invalid argument
88+
await stream.rerender('foo')
89+
}
90+
{
91+
// prop type is implicitly set via the render function argument
92+
const stream = await renderHookToSnapshotStream((_arg1: string) => {})
93+
// @ts-expect-error should not be assignable
94+
const _test1: SnapshotStream<void, void> = stream
95+
const _test2: SnapshotStream<void, string> = stream
96+
// @ts-expect-error missing argument
97+
await stream.rerender()
98+
await stream.rerender('foo')
99+
}
100+
{
101+
// prop type is implicitly set via the initialProps argument
102+
const stream = await renderHookToSnapshotStream(() => {}, {
103+
initialProps: 'initial',
104+
})
105+
// @ts-expect-error should not be assignable
106+
const _test1: SnapshotStream<void, void> = stream
107+
const _test2: SnapshotStream<void, string> = stream
108+
// @ts-expect-error missing argument
109+
await stream.rerender()
110+
await stream.rerender('foo')
111+
}
112+
})

src/renderHookToSnapshotStream.tsx

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable @typescript-eslint/no-invalid-void-type */
12
import {type RenderHookOptions} from '@testing-library/react/pure.js'
23
import React from 'rehackt'
34
import {createRenderStream} from './renderStream/createRenderStream.js'
@@ -41,27 +42,27 @@ export interface SnapshotStream<Snapshot, Props> extends Assertable {
4142
* Does not advance the render iterator.
4243
*/
4344
waitForNextSnapshot(options?: NextRenderOptions): Promise<Snapshot>
44-
rerender: (rerenderCallbackProps?: Props) => Promise<void>
45+
rerender: (rerenderCallbackProps: Props) => Promise<void>
4546
unmount: () => void
4647
}
4748

48-
export async function renderHookToSnapshotStream<ReturnValue, Props>(
49+
export async function renderHookToSnapshotStream<ReturnValue, Props = void>(
4950
renderCallback: (props: Props) => ReturnValue,
5051
{initialProps, ...renderOptions}: RenderHookOptions<Props> = {},
5152
): Promise<SnapshotStream<ReturnValue, Props>> {
5253
const {render, ...stream} = createRenderStream<{value: ReturnValue}, never>()
5354

54-
const HookComponent: React.FC<{arg: Props | undefined}> = props => {
55-
stream.replaceSnapshot({value: renderCallback(props.arg!)})
55+
const HookComponent: React.FC<{arg: Props}> = props => {
56+
stream.replaceSnapshot({value: renderCallback(props.arg)})
5657
return null
5758
}
5859

5960
const {rerender: baseRerender, unmount} = await render(
60-
<HookComponent arg={initialProps} />,
61+
<HookComponent arg={initialProps!} />,
6162
renderOptions,
6263
)
6364

64-
function rerender(rerenderCallbackProps?: Props) {
65+
function rerender(rerenderCallbackProps: Props) {
6566
return baseRerender(<HookComponent arg={rerenderCallbackProps} />)
6667
}
6768

0 commit comments

Comments
 (0)