Skip to content

Commit ac8d31a

Browse files
committed
test: add testing for component 'PostList'
1 parent 934c5ca commit ac8d31a

1 file changed

Lines changed: 48 additions & 1 deletion

File tree

apps/solidjs-boilerplate/src/components/modules/PostList/PostList.test.tsx

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
import type { JSX } from 'solid-js';
22

33
import { MetaProvider } from '@solidjs/meta';
4-
import { Route, Router } from '@solidjs/router';
4+
import {
5+
Route,
6+
Router,
7+
MemoryRouter,
8+
createMemoryHistory,
9+
} from '@solidjs/router';
510
import { render, renderHook, screen, waitFor } from '@solidjs/testing-library';
611
import { QueryClient, QueryClientProvider } from '@tanstack/solid-query';
712
import { HttpResponse, http } from 'msw';
813
import toast from 'solid-toast';
914
import { describe, expect, test, vi } from 'vitest';
1015

16+
import App from '@/App';
1117
import PostList from '@/components/modules/PostList/PostList';
1218
import useFetchPostList from '@/hooks/useFetchPostList';
1319
import { server } from '@/mocks/server';
@@ -18,6 +24,7 @@ vi.mock('solid-toast', () => ({
1824
default: {
1925
error: vi.fn(),
2026
},
27+
Toaster: vi.fn(),
2128
}));
2229

2330
describe('PostList component', () => {
@@ -112,6 +119,46 @@ describe('PostList component', () => {
112119
});
113120
});
114121

122+
test('should render post titles', async () => {
123+
// Mock window.ResizeObserver @ https://vitest.dev/guide/mocking.html#globals
124+
const ResizeObserverMock = vi.fn(() => ({
125+
disconnect: vi.fn(),
126+
observe: vi.fn(),
127+
takeRecords: vi.fn(),
128+
unobserve: vi.fn(),
129+
}));
130+
vi.stubGlobal('ResizeObserver', ResizeObserverMock);
131+
// now you can access it as `ResizeObserver` or `window.ResizeObserver`
132+
133+
const queryClient = new QueryClient();
134+
135+
// @see https://github.com/solidjs/solid-router/issues/335#issuecomment-1918115042
136+
const history = createMemoryHistory();
137+
history.set({ value: '/post' });
138+
139+
render(() => (
140+
<MetaProvider>
141+
<QueryClientProvider client={queryClient}>
142+
<MemoryRouter root={App} history={history}>
143+
<Route path="/post" component={PostList} />
144+
</MemoryRouter>
145+
</QueryClientProvider>
146+
</MetaProvider>
147+
));
148+
149+
await waitFor(async () => {
150+
expect(
151+
screen.getByText(
152+
'sunt aut facere repellat provident occaecati excepturi optio reprehenderit',
153+
),
154+
).toBeInTheDocument();
155+
});
156+
157+
await waitFor(async () => {
158+
expect(screen.getByText('nesciunt quas odio')).toBeInTheDocument();
159+
});
160+
});
161+
115162
test('should handle API call failure', async () => {
116163
const errorMessage = 'Failed to fetch data.';
117164
const toastErrorSpy = vi.spyOn(toast, 'error');

0 commit comments

Comments
 (0)