Skip to content

Commit 1070ddf

Browse files
committed
test: 입력한 새로운 일정 정보에 맞춰 모든 필드가 이벤트 리스트에 정확히 저장된다.
1 parent af31375 commit 1070ddf

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

src/__mocks__/handlers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const serverState = { events };
1010

1111
export const handlers = [
1212
http.get('/api/events', () => {
13-
return HttpResponse.json(serverState.events);
13+
return HttpResponse.json({ events: serverState.events });
1414
}),
1515

1616
http.post('/api/events', async ({ request }) => {

src/__tests__/medium.integration.spec.tsx

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import CssBaseline from '@mui/material/CssBaseline';
22
import { ThemeProvider, createTheme } from '@mui/material/styles';
3-
import { render, screen, within, act } from '@testing-library/react';
3+
import { render, screen, within, act, fireEvent, RenderResult, waitFor } from '@testing-library/react';
44
import { UserEvent, userEvent } from '@testing-library/user-event';
55
import { http, HttpResponse } from 'msw';
66
import { SnackbarProvider } from 'notistack';
@@ -10,8 +10,42 @@ import App from '../App';
1010
import { server } from '../setupTests';
1111
import { Event } from '../types';
1212

13+
// 테스트에 사용할 공용 렌더 함수 (MUI + Snackbar Provider 랩핑)
14+
const renderApp = () => {
15+
const theme = createTheme();
16+
return render(
17+
<ThemeProvider theme={theme}>
18+
<CssBaseline />
19+
<SnackbarProvider maxSnack={1}>
20+
<App />
21+
</SnackbarProvider>
22+
</ThemeProvider>
23+
);
24+
};
25+
1326
describe('일정 CRUD 및 기본 기능', () => {
14-
it('입력한 새로운 일정 정보에 맞춰 모든 필드가 이벤트 리스트에 정확히 저장된다.', async () => {
27+
it.only('입력한 새로운 일정 정보에 맞춰 모든 필드가 이벤트 리스트에 정확히 저장된다.', async () => {
28+
renderApp();
29+
30+
fireEvent.change(screen.getByLabelText('제목'), { target: { value : '테스트 - 새 회의'}});
31+
fireEvent.change(screen.getByLabelText('날짜'), { target: { value : '2025-08-01'}});
32+
fireEvent.change(screen.getByLabelText('설명'), { target: { value : '테스트 - 설명'}});
33+
fireEvent.change(screen.getByLabelText('시작 시간'), { target: { value : '17:00'}});
34+
fireEvent.change(screen.getByLabelText('종료 시간'), { target: { value : '18:00'}});
35+
36+
await fireEvent.click(
37+
screen.getByTestId('event-submit-button')
38+
);
39+
40+
await waitFor(() => {
41+
screen.getByTestId('event-list');
42+
})
43+
44+
const eventList = within(screen.getByTestId('event-list'));
45+
expect(eventList.getByText('테스트 - 새 회의')).toBeInTheDocument();
46+
expect(eventList.getByText('2025-08-01')).toBeInTheDocument();
47+
expect(eventList.getByText('테스트 - 설명')).toBeInTheDocument();
48+
1549
// ! HINT. event를 추가 제거하고 저장하는 로직을 잘 살펴보고, 만약 그대로 구현한다면 어떤 문제가 있을 지 고민해보세요.
1650
});
1751

0 commit comments

Comments
 (0)