|
1 | | -import { RenderHookOptions } from "@testing-library/react"; |
2 | | -import { createRenderStream } from "./renderStream/createRenderStream.js"; |
3 | | -import type { NextRenderOptions } from "./renderStream/createRenderStream.js"; |
| 1 | +import {RenderHookOptions} from '@testing-library/react' |
| 2 | +import {createRenderStream} from './renderStream/createRenderStream.js' |
| 3 | +import type {NextRenderOptions} from './renderStream/createRenderStream.js' |
4 | 4 |
|
5 | | -import { Render } from "./renderStream/Render.js"; |
6 | | -import { createElement } from "rehackt"; |
7 | | -import { Assertable, assertableSymbol, markAssertable } from "./assertable.js"; |
| 5 | +import {Render} from './renderStream/Render.js' |
| 6 | +import {createElement} from 'rehackt' |
| 7 | +import {Assertable, assertableSymbol, markAssertable} from './assertable.js' |
8 | 8 |
|
9 | 9 | export interface SnapshotStream<Snapshot, Props> extends Assertable { |
10 | 10 | /** |
11 | 11 | * An array of all renders that have happened so far. |
12 | 12 | * Errors thrown during component render will be captured here, too. |
13 | 13 | */ |
14 | 14 | renders: Array< |
15 | | - | Render<{ value: Snapshot }> |
16 | | - | { phase: "snapshotError"; count: number; error: unknown } |
17 | | - >; |
| 15 | + | Render<{value: Snapshot}> |
| 16 | + | {phase: 'snapshotError'; count: number; error: unknown} |
| 17 | + > |
18 | 18 | /** |
19 | 19 | * Peeks the next render from the current iterator position, without advancing the iterator. |
20 | 20 | * If no render has happened yet, it will wait for the next render to happen. |
21 | 21 | * @throws {WaitForRenderTimeoutError} if no render happens within the timeout |
22 | 22 | */ |
23 | | - peekSnapshot(options?: NextRenderOptions): Promise<Snapshot>; |
| 23 | + peekSnapshot(options?: NextRenderOptions): Promise<Snapshot> |
24 | 24 | /** |
25 | 25 | * Iterates to the next render and returns it. |
26 | 26 | * If no render has happened yet, it will wait for the next render to happen. |
27 | 27 | * @throws {WaitForRenderTimeoutError} if no render happens within the timeout |
28 | 28 | */ |
29 | 29 | takeSnapshot: Assertable & |
30 | | - ((options?: NextRenderOptions) => Promise<Snapshot>); |
| 30 | + ((options?: NextRenderOptions) => Promise<Snapshot>) |
31 | 31 | /** |
32 | 32 | * Returns the total number of renders. |
33 | 33 | */ |
34 | | - totalSnapshotCount(): number; |
| 34 | + totalSnapshotCount(): number |
35 | 35 | /** |
36 | 36 | * Returns the current render. |
37 | 37 | * @throws {Error} if no render has happened yet |
38 | 38 | */ |
39 | | - getCurrentSnapshot(): Snapshot; |
| 39 | + getCurrentSnapshot(): Snapshot |
40 | 40 | /** |
41 | 41 | * Waits for the next render to happen. |
42 | 42 | * Does not advance the render iterator. |
43 | 43 | */ |
44 | | - waitForNextSnapshot(options?: NextRenderOptions): Promise<Snapshot>; |
45 | | - rerender: (rerenderCallbackProps: Props) => void; |
46 | | - unmount: () => void; |
| 44 | + waitForNextSnapshot(options?: NextRenderOptions): Promise<Snapshot> |
| 45 | + rerender: (rerenderCallbackProps: Props) => void |
| 46 | + unmount: () => void |
47 | 47 | } |
48 | 48 |
|
49 | 49 | export function renderHookToSnapshotStream<ReturnValue, Props extends {}>( |
50 | 50 | renderCallback: (props: Props) => ReturnValue, |
51 | | - { initialProps, ...options }: RenderHookOptions<Props> = {} |
| 51 | + {initialProps, ...options}: RenderHookOptions<Props> = {}, |
52 | 52 | ): SnapshotStream<ReturnValue, Props> { |
53 | | - const { render, ...stream } = createRenderStream<{ value: ReturnValue }>(); |
| 53 | + const {render, ...stream} = createRenderStream<{value: ReturnValue}>() |
54 | 54 |
|
55 | | - const HookComponent: React.FC<Props> = (props) => { |
56 | | - stream.replaceSnapshot({ value: renderCallback(props) }); |
57 | | - return null; |
58 | | - }; |
| 55 | + const HookComponent: React.FC<Props> = props => { |
| 56 | + stream.replaceSnapshot({value: renderCallback(props)}) |
| 57 | + return null |
| 58 | + } |
59 | 59 |
|
60 | | - const { rerender: baseRerender, unmount } = render( |
| 60 | + const {rerender: baseRerender, unmount} = render( |
61 | 61 | createElement(HookComponent, initialProps), |
62 | | - options |
63 | | - ); |
| 62 | + options, |
| 63 | + ) |
64 | 64 |
|
65 | 65 | function rerender(rerenderCallbackProps: Props) { |
66 | | - return baseRerender(createElement(HookComponent, rerenderCallbackProps)); |
| 66 | + return baseRerender(createElement(HookComponent, rerenderCallbackProps)) |
67 | 67 | } |
68 | 68 |
|
69 | 69 | return { |
70 | 70 | [assertableSymbol]: stream, |
71 | 71 | renders: stream.renders, |
72 | 72 | totalSnapshotCount: stream.totalRenderCount, |
73 | 73 | async peekSnapshot(options) { |
74 | | - return (await stream.peekRender(options)).snapshot.value; |
| 74 | + return (await stream.peekRender(options)).snapshot.value |
75 | 75 | }, |
76 | 76 | takeSnapshot: markAssertable(async function takeSnapshot(options) { |
77 | | - return (await stream.takeRender(options)).snapshot.value; |
| 77 | + return (await stream.takeRender(options)).snapshot.value |
78 | 78 | }, stream), |
79 | 79 | getCurrentSnapshot() { |
80 | | - return stream.getCurrentRender().snapshot.value; |
| 80 | + return stream.getCurrentRender().snapshot.value |
81 | 81 | }, |
82 | 82 | async waitForNextSnapshot(options) { |
83 | | - return (await stream.waitForNextRender(options)).snapshot.value; |
| 83 | + return (await stream.waitForNextRender(options)).snapshot.value |
84 | 84 | }, |
85 | 85 | rerender, |
86 | 86 | unmount, |
87 | | - }; |
| 87 | + } |
88 | 88 | } |
0 commit comments