From 9b3b7669824fbeb5dfe7f8d5e69d91272a2c2d78 Mon Sep 17 00:00:00 2001 From: vikr01 Date: Fri, 18 Apr 2025 19:01:50 -0700 Subject: [PATCH 1/2] allow setting a displayName for wrapper component created in renderHook --- src/__tests__/renderHook.js | 21 +++++++++++++++++++++ src/pure.js | 6 +++++- types/index.d.ts | 3 ++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/__tests__/renderHook.js b/src/__tests__/renderHook.js index f331e90e..a921e432 100644 --- a/src/__tests__/renderHook.js +++ b/src/__tests__/renderHook.js @@ -50,6 +50,27 @@ test('allows rerendering', () => { expect(result.current).toEqual(['right', expect.any(Function)]) }) +test('allows setting a displayName', () => { + let capturedElement = null + + const spyWrapper = ({ children }) => { + // Capture the hook element React creates + capturedElement = React.Children.only(children); + return <>{children}; + } + + const useMyLocalHook = jest.fn() + + renderHook(useMyLocalHook, { + wrapper: spyWrapper, + displayName: 'CustomHookDisplayName', + }) + + expect(useMyLocalHook).toHaveBeenCalledTimes(1) + + expect(capturedElement?.type?.displayName).toBe('CustomHookDisplayName') +}); + test('allows wrapper components', async () => { const Context = React.createContext('default') function Wrapper({children}) { diff --git a/src/pure.js b/src/pure.js index 0f9c487d..1b9988d3 100644 --- a/src/pure.js +++ b/src/pure.js @@ -318,7 +318,7 @@ function cleanup() { } function renderHook(renderCallback, options = {}) { - const {initialProps, ...renderOptions} = options + const {initialProps, displayName, ...renderOptions} = options if (renderOptions.legacyRoot && typeof ReactDOM.render !== 'function') { const error = new Error( @@ -342,6 +342,10 @@ function renderHook(renderCallback, options = {}) { return null } + if (displayName !== undefined) { + TestComponent.displayName = displayName; + } + const {rerender: baseRerender, unmount} = render( , renderOptions, diff --git a/types/index.d.ts b/types/index.d.ts index bdd60567..81c6bf95 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -253,7 +253,8 @@ export interface RenderHookOptions< * The argument passed to the renderHook callback. Can be useful if you plan * to use the rerender utility to change the values passed to your hook. */ - initialProps?: Props | undefined + initialProps?: Props | undefined, + displayName?: React.FunctionComponent['displayName'], } /** From 443834a3982914ab5c9a0ddf962525affa626b13 Mon Sep 17 00:00:00 2001 From: vikr01 Date: Fri, 18 Apr 2025 19:07:02 -0700 Subject: [PATCH 2/2] fix prettier --- src/__tests__/renderHook.js | 10 +++++----- src/pure.js | 2 +- types/index.d.ts | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/__tests__/renderHook.js b/src/__tests__/renderHook.js index a921e432..8ecfa83d 100644 --- a/src/__tests__/renderHook.js +++ b/src/__tests__/renderHook.js @@ -53,10 +53,10 @@ test('allows rerendering', () => { test('allows setting a displayName', () => { let capturedElement = null - const spyWrapper = ({ children }) => { + const spyWrapper = ({children}) => { // Capture the hook element React creates - capturedElement = React.Children.only(children); - return <>{children}; + capturedElement = React.Children.only(children) + return <>{children} } const useMyLocalHook = jest.fn() @@ -67,9 +67,9 @@ test('allows setting a displayName', () => { }) expect(useMyLocalHook).toHaveBeenCalledTimes(1) - + expect(capturedElement?.type?.displayName).toBe('CustomHookDisplayName') -}); +}) test('allows wrapper components', async () => { const Context = React.createContext('default') diff --git a/src/pure.js b/src/pure.js index 1b9988d3..43d0282e 100644 --- a/src/pure.js +++ b/src/pure.js @@ -343,7 +343,7 @@ function renderHook(renderCallback, options = {}) { } if (displayName !== undefined) { - TestComponent.displayName = displayName; + TestComponent.displayName = displayName } const {rerender: baseRerender, unmount} = render( diff --git a/types/index.d.ts b/types/index.d.ts index 81c6bf95..17702718 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -253,8 +253,8 @@ export interface RenderHookOptions< * The argument passed to the renderHook callback. Can be useful if you plan * to use the rerender utility to change the values passed to your hook. */ - initialProps?: Props | undefined, - displayName?: React.FunctionComponent['displayName'], + initialProps?: Props | undefined + displayName?: React.FunctionComponent['displayName'] } /**