@@ -51,19 +51,118 @@ describe('getDaysInMonth', () => {
5151} ) ;
5252
5353describe ( 'getWeekDates' , ( ) => {
54- it ( '주중의 날짜(수요일)에 대해 올바른 주의 날짜들을 반환한다' , ( ) => { } ) ;
54+ it . only ( '주중의 날짜(수요일)에 대해 올바른 주의 날짜들을 반환한다' , ( ) => {
55+ const wednesday = new Date ( 2025 , 7 , 6 ) ; // 2025-08-06 수요일
56+ const weekDates = getWeekDates ( wednesday ) ;
57+
58+ // 해당 주는 2025-08-03(일) ~ 2025-08-09(토)
59+ expect ( weekDates ) . toHaveLength ( 7 ) ;
60+ expect ( weekDates [ 0 ] ) . toEqual ( new Date ( 2025 , 7 , 3 ) ) ; // 2025-08-03 일요일
61+ expect ( weekDates [ 1 ] ) . toEqual ( new Date ( 2025 , 7 , 4 ) ) ; // 2025-08-04 월요일
62+ expect ( weekDates [ 2 ] ) . toEqual ( new Date ( 2025 , 7 , 5 ) ) ; // 2025-08-05 화요일
63+ expect ( weekDates [ 3 ] ) . toEqual ( new Date ( 2025 , 7 , 6 ) ) ; // 2025-08-06 수요일
64+ expect ( weekDates [ 4 ] ) . toEqual ( new Date ( 2025 , 7 , 7 ) ) ; // 2025-08-07 목요일
65+ expect ( weekDates [ 5 ] ) . toEqual ( new Date ( 2025 , 7 , 8 ) ) ; // 2025-08-08 금요일
66+ expect ( weekDates [ 6 ] ) . toEqual ( new Date ( 2025 , 7 , 9 ) ) ; // 2025-08-09 토요일
67+ } ) ;
5568
56- it ( '주의 시작(월요일)에 대해 올바른 주의 날짜들을 반환한다' , ( ) => { } ) ;
69+ it . only ( '주의 시작(월요일)에 대해 올바른 주의 날짜들을 반환한다' , ( ) => {
70+ const monday = new Date ( 2025 , 7 , 4 ) ; // 2025-08-04 월요일
71+ const weekDates = getWeekDates ( monday ) ;
72+
73+ // 해당 주는 2025-08-03(일) ~ 2025-08-09(토)
74+ expect ( weekDates ) . toHaveLength ( 7 ) ;
75+ expect ( weekDates [ 0 ] ) . toEqual ( new Date ( 2025 , 7 , 3 ) ) ; // 2025-08-03 일요일
76+ expect ( weekDates [ 1 ] ) . toEqual ( new Date ( 2025 , 7 , 4 ) ) ; // 2025-08-04 월요일
77+ expect ( weekDates [ 2 ] ) . toEqual ( new Date ( 2025 , 7 , 5 ) ) ; // 2025-08-05 화요일
78+ expect ( weekDates [ 3 ] ) . toEqual ( new Date ( 2025 , 7 , 6 ) ) ; // 2025-08-06 수요일
79+ expect ( weekDates [ 4 ] ) . toEqual ( new Date ( 2025 , 7 , 7 ) ) ; // 2025-08-07 목요일
80+ expect ( weekDates [ 5 ] ) . toEqual ( new Date ( 2025 , 7 , 8 ) ) ; // 2025-08-08 금요일
81+ expect ( weekDates [ 6 ] ) . toEqual ( new Date ( 2025 , 7 , 9 ) ) ; // 2025-08-09 토요일
82+ } ) ;
5783
58- it ( '주의 끝(일요일)에 대해 올바른 주의 날짜들을 반환한다' , ( ) => { } ) ;
84+ it . only ( '주의 끝(일요일)에 대해 올바른 주의 날짜들을 반환한다' , ( ) => {
85+ const sunday = new Date ( 2025 , 7 , 3 ) ; // 2025-08-03 일요일
86+ const weekDates = getWeekDates ( sunday ) ;
87+
88+ // 해당 주는 2025-08-03(일) ~ 2025-08-09(토)
89+ expect ( weekDates ) . toHaveLength ( 7 ) ;
90+ expect ( weekDates [ 0 ] ) . toEqual ( new Date ( 2025 , 7 , 3 ) ) ; // 2025-08-03 일요일
91+ expect ( weekDates [ 1 ] ) . toEqual ( new Date ( 2025 , 7 , 4 ) ) ; // 2025-08-04 월요일
92+ expect ( weekDates [ 2 ] ) . toEqual ( new Date ( 2025 , 7 , 5 ) ) ; // 2025-08-05 화요일
93+ expect ( weekDates [ 3 ] ) . toEqual ( new Date ( 2025 , 7 , 6 ) ) ; // 2025-08-06 수요일
94+ expect ( weekDates [ 4 ] ) . toEqual ( new Date ( 2025 , 7 , 7 ) ) ; // 2025-08-07 목요일
95+ expect ( weekDates [ 5 ] ) . toEqual ( new Date ( 2025 , 7 , 8 ) ) ; // 2025-08-08 금요일
96+ expect ( weekDates [ 6 ] ) . toEqual ( new Date ( 2025 , 7 , 9 ) ) ; // 2025-08-09 토요일
97+ } ) ;
5998
60- it ( '연도를 넘어가는 주의 날짜를 정확히 처리한다 (연말)' , ( ) => { } ) ;
99+ it . only ( '연도를 넘어가는 주의 날짜를 정확히 처리한다 (연말)' , ( ) => {
100+ const date = new Date ( 2025 , 11 , 31 ) ; // 2025-12-31 수요일
101+ const weekDates = getWeekDates ( date ) ;
102+
103+ expect ( weekDates ) . toHaveLength ( 7 ) ;
104+ expect ( weekDates [ 0 ] ) . toEqual ( new Date ( 2025 , 11 , 28 ) ) ; // 2025-12-28 일요일
105+ expect ( weekDates [ 1 ] ) . toEqual ( new Date ( 2025 , 11 , 29 ) ) ; // 2025-12-29 월요일
106+ expect ( weekDates [ 2 ] ) . toEqual ( new Date ( 2025 , 11 , 30 ) ) ; // 2025-12-30 화요일
107+ expect ( weekDates [ 3 ] ) . toEqual ( new Date ( 2025 , 11 , 31 ) ) ; // 2025-12-31 수요일
108+ expect ( weekDates [ 4 ] ) . toEqual ( new Date ( 2026 , 0 , 1 ) ) ; // 2026-01-01 목요일
109+ expect ( weekDates [ 5 ] ) . toEqual ( new Date ( 2026 , 0 , 2 ) ) ; // 2026-01-02 금요일
110+ expect ( weekDates [ 6 ] ) . toEqual ( new Date ( 2026 , 0 , 3 ) ) ; // 2026-01-03 토요일
111+ } ) ;
61112
62- it ( '연도를 넘어가는 주의 날짜를 정확히 처리한다 (연초)' , ( ) => { } ) ;
113+ it . only ( '연도를 넘어가는 주의 날짜를 정확히 처리한다 (연초)' , ( ) => {
114+ const date = new Date ( 2025 , 0 , 1 ) ; // 2025-01-01 수요일
115+ const weekDates = getWeekDates ( date ) ;
116+
117+ expect ( weekDates ) . toHaveLength ( 7 ) ;
118+ expect ( weekDates [ 0 ] ) . toEqual ( new Date ( 2024 , 11 , 29 ) ) ; // 2024-12-29 일요일
119+ expect ( weekDates [ 1 ] ) . toEqual ( new Date ( 2024 , 11 , 30 ) ) ; // 2024-12-30 월요일
120+ expect ( weekDates [ 2 ] ) . toEqual ( new Date ( 2024 , 11 , 31 ) ) ; // 2024-12-31 화요일
121+ expect ( weekDates [ 3 ] ) . toEqual ( new Date ( 2025 , 0 , 1 ) ) ; // 2025-01-01 수요일
122+ expect ( weekDates [ 4 ] ) . toEqual ( new Date ( 2025 , 0 , 2 ) ) ; // 2025-01-02 목요일
123+ expect ( weekDates [ 5 ] ) . toEqual ( new Date ( 2025 , 0 , 3 ) ) ; // 2025-01-03 금요일
124+ expect ( weekDates [ 6 ] ) . toEqual ( new Date ( 2025 , 0 , 4 ) ) ; // 2025-01-04 토요일
125+ } ) ;
63126
64- it ( '윤년의 2월 29일을 포함한 주를 올바르게 처리한다' , ( ) => { } ) ;
127+ it . only ( '윤년의 2월 29일을 포함한 주를 올바르게 처리한다' , ( ) => {
128+ const date = new Date ( 2024 , 1 , 29 ) ; // 2024-02-29 목요일
129+ const weekDates = getWeekDates ( date ) ;
130+
131+ expect ( weekDates ) . toHaveLength ( 7 ) ;
132+ expect ( weekDates [ 0 ] ) . toEqual ( new Date ( 2024 , 1 , 25 ) ) ; // 2024-02-25 일요일
133+ expect ( weekDates [ 1 ] ) . toEqual ( new Date ( 2024 , 1 , 26 ) ) ; // 2024-02-26 월요일
134+ expect ( weekDates [ 2 ] ) . toEqual ( new Date ( 2024 , 1 , 27 ) ) ; // 2024-02-27 화요일
135+ expect ( weekDates [ 3 ] ) . toEqual ( new Date ( 2024 , 1 , 28 ) ) ; // 2024-02-28 수요일
136+ expect ( weekDates [ 4 ] ) . toEqual ( new Date ( 2024 , 1 , 29 ) ) ; // 2024-02-29 목요일
137+ expect ( weekDates [ 5 ] ) . toEqual ( new Date ( 2024 , 2 , 1 ) ) ; // 2024-03-01 금요일
138+ expect ( weekDates [ 6 ] ) . toEqual ( new Date ( 2024 , 2 , 2 ) ) ; // 2024-03-02 토요일
139+ } ) ;
65140
66- it ( '월의 마지막 날짜를 포함한 주를 올바르게 처리한다' , ( ) => { } ) ;
141+ it . only ( '월의 마지막 날짜를 포함한 주를 올바르게 처리한다' , ( ) => {
142+ const date = new Date ( 2025 , 7 , 31 ) ; // 2025-08-31 일요일
143+ const weekDates = getWeekDates ( date ) ;
144+
145+ // 해당 주는 2025-08-31(일) ~ 2025-09-06(토)
146+ expect ( weekDates ) . toHaveLength ( 7 ) ;
147+ expect ( weekDates [ 0 ] ) . toEqual ( new Date ( 2025 , 7 , 31 ) ) ; // 2025-08-31 일요일
148+ expect ( weekDates [ 1 ] ) . toEqual ( new Date ( 2025 , 8 , 1 ) ) ; // 2025-09-01 월요일
149+ expect ( weekDates [ 2 ] ) . toEqual ( new Date ( 2025 , 8 , 2 ) ) ; // 2025-09-02 화요일
150+ expect ( weekDates [ 3 ] ) . toEqual ( new Date ( 2025 , 8 , 3 ) ) ; // 2025-09-03 수요일
151+ expect ( weekDates [ 4 ] ) . toEqual ( new Date ( 2025 , 8 , 4 ) ) ; // 2025-09-04 목요일
152+ expect ( weekDates [ 5 ] ) . toEqual ( new Date ( 2025 , 8 , 5 ) ) ; // 2025-09-05 금요일
153+ expect ( weekDates [ 6 ] ) . toEqual ( new Date ( 2025 , 8 , 6 ) ) ; // 2025-09-06 토요일
154+ } ) ;
155+
156+ it . only ( '입력된 Date 객체가 함수 실행 후 변경되는 부작용이 있다' , ( ) => {
157+ const originalDate = new Date ( 2025 , 7 , 6 ) ; // 2025-08-06 수요일
158+ const originalTime = originalDate . getTime ( ) ;
159+
160+ getWeekDates ( originalDate ) ;
161+
162+ // 부작용 확인: 원본 객체가 변경됨 (버그)
163+ expect ( originalDate . getTime ( ) ) . not . toBe ( originalTime ) ;
164+ expect ( originalDate ) . toEqual ( new Date ( 2025 , 7 , 3 ) ) ; // 2025-08-03 일요일로 변경됨
165+ } ) ;
67166} ) ;
68167
69168describe ( 'getWeeksAtMonth' , ( ) => {
0 commit comments