11import CssBaseline from '@mui/material/CssBaseline' ;
22import { 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' ;
44import { UserEvent , userEvent } from '@testing-library/user-event' ;
55import { http , HttpResponse } from 'msw' ;
66import { SnackbarProvider } from 'notistack' ;
@@ -10,8 +10,41 @@ import App from '../App';
1010import { server } from '../setupTests' ;
1111import { Event } from '../types' ;
1212
13+ const renderApp = ( ) => {
14+ const theme = createTheme ( ) ;
15+ return render (
16+ < ThemeProvider theme = { theme } >
17+ < CssBaseline />
18+ < SnackbarProvider >
19+ < App />
20+ </ SnackbarProvider >
21+ </ ThemeProvider >
22+ ) ;
23+ } ;
24+
1325describe ( '일정 CRUD 및 기본 기능' , ( ) => {
14- it ( '입력한 새로운 일정 정보에 맞춰 모든 필드가 이벤트 리스트에 정확히 저장된다.' , async ( ) => {
26+ it . only ( '입력한 새로운 일정 정보에 맞춰 모든 필드가 이벤트 리스트에 정확히 저장된다.' , async ( ) => {
27+ renderApp ( ) ;
28+
29+ fireEvent . change ( screen . getByLabelText ( '제목' ) , { target : { value : '테스트 - 새 회의' } } ) ;
30+ fireEvent . change ( screen . getByLabelText ( '날짜' ) , { target : { value : '2025-08-01' } } ) ;
31+ fireEvent . change ( screen . getByLabelText ( '설명' ) , { target : { value : '테스트 - 설명' } } ) ;
32+ fireEvent . change ( screen . getByLabelText ( '시작 시간' ) , { target : { value : '17:00' } } ) ;
33+ fireEvent . change ( screen . getByLabelText ( '종료 시간' ) , { target : { value : '18:00' } } ) ;
34+
35+ await fireEvent . click (
36+ screen . getByTestId ( 'event-submit-button' )
37+ ) ;
38+
39+ await waitFor ( ( ) => {
40+ screen . getByTestId ( 'event-list' ) ;
41+ } )
42+
43+ const eventList = within ( screen . getByTestId ( 'event-list' ) ) ;
44+ expect ( eventList . getByText ( '테스트 - 새 회의' ) ) . toBeInTheDocument ( ) ;
45+ expect ( eventList . getByText ( '2025-08-01' ) ) . toBeInTheDocument ( ) ;
46+ expect ( eventList . getByText ( '테스트 - 설명' ) ) . toBeInTheDocument ( ) ;
47+
1548 // ! HINT. event를 추가 제거하고 저장하는 로직을 잘 살펴보고, 만약 그대로 구현한다면 어떤 문제가 있을 지 고민해보세요.
1649 } ) ;
1750
0 commit comments