diff --git a/src/__tests__/renderHook.js b/src/__tests__/renderHook.js index f331e90e..8ecfa83d 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..43d0282e 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..17702718 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -254,6 +254,7 @@ export interface RenderHookOptions< * to use the rerender utility to change the values passed to your hook. */ initialProps?: Props | undefined + displayName?: React.FunctionComponent['displayName'] } /**