Как я могу добавить типизацию в функцию в vitest, чтобы была возможность использовать метод mockReturnValue?

  • 15 августа 2023 г. 1:46
Ответы на вопрос 4
Чтобы добавить типизацию в функцию в vitest, вам необходимо задать тип для переменной `useScreenResolution` и для функции `mockReturnValue`. В вашем случае, вам нужно добавить тип `Mock` для переменной `useScreenResolution`, а для функции `mockReturnValue` указать тип параметра как `"mobile" | "desktop"`. 

Вот как будет выглядеть обновленный код:

```typescript
it("Closing and opening mobile navigation", async () => {
    interface Mock {
        mockReturnValue: (value: "mobile" | "desktop") => void;
    }
    
    const useScreenResolution: Mock = {
        mockReturnValue: jest.fn(),
    };

    useScreenResolution.mockReturnValue("mobile");

    render(
        <RenderWithRouter>
            <Sidebar />
        </RenderWithRouter>
    );

    const burgerIcon = screen.getByTestId("burgerIcon");
    expect(burgerIcon).toBeInTheDocument();
    expect(screen.queryByTestId("sidebar")).toBeNull();

    await userEvent.click(burgerIcon);

    expect(screen.queryByTestId("sidebar")).toBeInTheDocument();

    const btnCloseSidebar = screen.getByTestId("btnCloseSidebar");
    expect(btnCloseSidebar).toBeInTheDocument();

    await userEvent.click(btnCloseSidebar);

    expect(screen.queryByTestId("sidebar")).toBeNull();
});
```

Теперь вы можете использовать метод `mockReturnValue` с корректными типами аргументов.
const useScreenResolution: Mock & (() => ) = (...) => {...}?

Найден вариант реализации вот такого использования:
const mockUseScreenResolution = vi.mocked(useScreenResolution)
mockUseScreenResolution. mockReturnValue("mobile")

Он предоставляет типизацию и создает мок-объект соответствующего типа. Рекомендую вам использовать это.
const useScreenResolution: Mock & (() => ) = (...) => {...}?
Найдено решение вот такой реализации:
const mockUseScreenResolution = vi.mocked(useScreenResolution);
mockUseScreenResolution.mockReturnValue("mobile");

Этот подход позволяет сразу типизировать и создавать моковую функцию, используйте его.
Похожие вопросы