Jest sessionStorage cannot be mocked

Viewed 28

I have a util function that calls the sessionStorage. it fails saying received calls are 0. It fails due to sessionStorage accessing. It works if that part is commented out. I tried mocking the sessionStorage but still no luck.

Here's the test,

 it("should be to search a composition query", async () => {
    const compositionQuery = "1 and 2";
    jest.mock("./composition.utils", () => {
      const original = jest.requireActual("./composition.utils");
      return {
        ...original,
        createCompositionQuery: jest
          .fn()
          .mockImplementation(() => mockCompositionQuery),
      };
    });

    Storage.prototype.getItem = jest
      .fn()
      .mockReturnValue(mockSearchHistory.toString());

    const user = userEvent.setup();
    const submit = jest.fn();
    render(<Composition onSubmit={submit} />);
    const compositionInput = screen.getByTestId("composition-query");
    await user.click(compositionInput);
    await waitFor(() => user.type(compositionInput, compositionQuery));

    await waitFor(() => user.click(screen.getByTestId("search-btn")));
    await waitFor(() =>
      expect(submit).toBeCalledWith(
        mockCompositionQuery,
        `Composition of ${compositionQuery}`
      )
    );
  });

Here's the util function that I'm mocking.

export const createCompositionQuery = (search: string) => {
  const query: Query = {
    type: "",
    columns: addColumnsToDisplay(),
    rowFilters: [],
    customRowFilterCombination: "",
  };

  const searchTokens = search.split(/\s+/);

  searchTokens.forEach((eachToken) => {
      const history = JSON.parse(
        window.sessionStorage.getItem("openmrsHistory")
      );
      const operandQuery = history[parseInt(eachToken) - 1];

      const jsonRequestObject = operandQuery.parameters;
      jsonRequestObject.customRowFilterCombination = formatFilterCombination(
        jsonRequestObject.customRowFilterCombination,
        query.rowFilters.length
  });

  return { query };
};

Here's the github link for the full implementation

0 Answers
Related