Skip to content

Commit

Permalink
Add msw and refactor test for more future proof setup
Browse files Browse the repository at this point in the history
  • Loading branch information
Sean Scully authored and seanes committed Feb 5, 2024
1 parent 45f8944 commit cbb794b
Show file tree
Hide file tree
Showing 8 changed files with 76 additions and 7 deletions.
19 changes: 12 additions & 7 deletions packages/frontend-design-poc/src/app.spec.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
import { describe, it, expect } from 'vitest';
import { render } from '@testing-library/react';
import App from './App.tsx';
import { beforeAll, describe, expect, it } from "vitest";
import { customRender } from "../utils/test-utils.tsx";
import App from "./App.tsx";
import { server } from "./mocks/node.ts";

describe('App Smoke Test', () => {
it('renders without crashing', () => {
const { getByTestId } = render(<App />);
const appElement = getByTestId('app');
describe("App Smoke Test", async () => {
beforeAll(async () => {
server.listen();
});

it("renders without crashing", () => {
const { getByRole } = customRender(<App />);
const appElement = getByRole("main");
expect(appElement).toBeTruthy();
});
});
Empty file.
4 changes: 4 additions & 0 deletions packages/frontend-design-poc/src/mocks/node.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import { setupServer } from 'msw/node'
import { handlers } from './handlers'

export const server = setupServer(...handlers)
26 changes: 26 additions & 0 deletions packages/frontend-design-poc/src/pages/PageLayout/PageLayout.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { HeaderContext } from 'app-shared/navigation/main-header/Header';
import { Outlet } from 'react-router-dom';
import { useUserQuery } from 'app-shared/hooks/queries';
import React, { useMemo } from 'react';
import type { IHeaderContext } from 'app-shared/navigation/main-header/Header';
import AppHeader from 'app-shared/navigation/main-header/Header';

export const PageLayout = () => {
const { data: user } = useUserQuery();

const headerContextValue: IHeaderContext = useMemo(
() => ({
user,
}),
[user],
);

return (
<>
<HeaderContext.Provider value={headerContextValue}>
<AppHeader showMenu={false} />
</HeaderContext.Provider>
<Outlet />
</>
);
};
1 change: 1 addition & 0 deletions packages/frontend-design-poc/src/pages/PageLayout/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { PageLayout } from './PageLayout';
Empty file.
Empty file.
33 changes: 33 additions & 0 deletions packages/frontend-design-poc/utils/test-utils.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { QueryClient, QueryClientProvider } from "react-query";
import { ReactElement } from "react";
import { MemoryRouter } from "react-router-dom";
import { render, RenderOptions } from "@testing-library/react";

interface IExtendedRenderOptions extends RenderOptions {
initialEntries?: string[];
}

const queryClient = new QueryClient({
defaultOptions: {
queries: {
retry: false,
},
},
});

export const customRender = (
ui: ReactElement,
options?: Omit<IExtendedRenderOptions, "wrapper">,
) => {
const Wrapper = ({ children }: { children: React.ReactNode }) => {
return (
<QueryClientProvider client={queryClient}>
<MemoryRouter initialEntries={options?.initialEntries ?? ["/"]}>
{children}
</MemoryRouter>
</QueryClientProvider>
);
};

return render(ui, { wrapper: Wrapper, ...options });
};

0 comments on commit cbb794b

Please sign in to comment.