Skip to content

Intial props not working when rendering a hook (or I've done something wrong.) #1277

@gbatterbee

Description

@gbatterbee
    "@testing-library/dom": "^8.13.0",
    "@testing-library/jest-dom": "^6.1.3",
    "@testing-library/react": "13.3.0",
    "@testing-library/react-hooks": "^8.0.1",
    "@testing-library/user-event": "^14.4.3",
     "react": "^18.2.0",
    "react-dom": "^18.2.0",   
    "react-test-renderer: 18.1.0)"
    "`node` version: 18"
    "`pnpm` (or `yarn`) version: 7"

Relevant code or config:

In the Reproduction details.
Taking the example from the docs, logged the initial props;

const CounterStepContext = createContext(1);

export const CounterStepProvider = ({
  step,
  children,
}: {
  step: number;
  children: React.ReactNode;
}) => {
  console.log({ step });
  return (
    <CounterStepContext.Provider value={step}>
      {children}
    </CounterStepContext.Provider>
  );
};

export function useCounter(initialValue = 0) {
  const [count, setCount] = useState(initialValue);
  const step = useContext(CounterStepContext);
  const increment = useCallback(() => setCount((x) => x + step), [step]);
  const reset = useCallback(() => setCount(initialValue), [initialValue]);
  return { count, increment, reset };
}

test("should use custom step when incrementing", () => {
  const wrapper = ({
    children,
    step,
  }: {
    step: number;
    children: React.ReactNode;
  }) => <CounterStepProvider step={step}>{children}</CounterStepProvider>;
  const { result, rerender } = renderHook(() => useCounter(), {
    wrapper,
    initialProps: {
      step: 2,
    },
  });

  act(() => {
    result.current.increment();
  });

  expect(result.current.count).toBe(2);

  /**
   * Change the step value
   */
  rerender({ step: 8 });

  act(() => {
    result.current.increment();
  });

  expect(result.current.count).toBe(10);
});
  console.log
    { step: undefined }

What you did:

Trying to use initialProps with the renderHook

What happened:

Initial props are not being passed.
No obvious error message, component just isn't receiving the props.

Reproduction:

Problem description:

Suggested solution:

Activity

mpeyper

mpeyper commented on Jan 31, 2024

@mpeyper
Member

Hi @gbatterbee, is this still causing you issues?

I want to confirm whether you are using renderHook from @testing-library/react-hooks (this library, up to react 17) or @testing-library/react (that library, react 18 and newer). We have a test around this case, does that pass in your environment?

gbatterbee

gbatterbee commented on Feb 6, 2024

@gbatterbee
Author

@mpeyper Sorry, didn't get notified of your message for some reason.
This is where we're using renderHook from.
image

I've not tried recently.
I'll take a look at your test case.
Thanks

gbatterbee

gbatterbee commented on Feb 6, 2024

@gbatterbee
Author

This is what i get
image

mpeyper

mpeyper commented on Feb 6, 2024

@mpeyper
Member

@mpeyper Sorry, didn't get notified of your message for some reason. This is where we're using renderHook from. image

I've not tried recently. I'll take a look at your test case. Thanks

In that case, I’ll transfer your ticket to their repo ( @testing-library/react) instead as we’re actually a different library. I hope they can get to the bottom of it for you.

eps1lon

eps1lon commented on Feb 7, 2024

@eps1lon
Member

initialProps is for the hook, not the component.

We should change the naming to avoid confusion. testing-library/react-hooks passed initialProps to both which is also confusing because it's harder to reason about (especially from a type perspective).

added
enhancementNew feature or request
BREAKING CHANGEThis change will require a major version bump
and removed
bugSomething isn't working
on Feb 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    BREAKING CHANGEThis change will require a major version bumpenhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @eps1lon@gbatterbee@mpeyper

        Issue actions

          Intial props not working when rendering a hook (or I've done something wrong.) · Issue #1277 · testing-library/react-testing-library