1주차가 시작됐다. 여러 밤 새벽에 자며 과제를 도전했는데, 결국 1주차 과제를 다 끝내지 못했다. 아쉽지만 어쩔수 있나? 2주차 발제가 시작되고 벌써 일요일이 다 지나가고 있지만 1주차 이해 안된 부분은 조금 더 살펴보고 있다. 못한 부분은 다시 작성해보고 ~
vite.config.ts 파일에 테스트 관련 정의된 부분에 global: true 는 vitest를 전역적으로 사용할 수 있게 해준다. 이 말은 import 문을 굳이 쓰지 않아도 된다는 말!
import react from '@vitejs/plugin-react-swc';
import { defineConfig } from 'vite';
import { defineConfig as defineTestConfig, mergeConfig } from 'vitest/config';
export default mergeConfig(
defineConfig({ ~~ }),
defineTestConfig({
test: {
globals: true,
environment: 'jsdom',
setupFiles: './src/setupTests.ts',
coverage: {
reportsDirectory: './.coverage',
reporter: ['lcov', 'json', 'json-summary'],
},
},
})
);
과제를 다 끝내지 못해서 찜찜한 기분이었다.
그래서 2가지를 생각했다.
특히, 같은 팀원 한 분이 코드리뷰를 해주었는데 내가 짠 테스트코드에서 이상한(?)부분을 이야기해주셨다. 나도 그분의 말에 공감했다. 그래서, 내가 짠 이상한 부분 외에도 전체적으로 Solution과 내 코드를 자체 코드리뷰하며 내가 왜 그렇게 짰는지와 Solution을 비교해가며 이해해보려 한다.
// 내 코드
describe('getWeekDates', () => {
it('주중의 날짜(수요일)에 대해 올바른 주의 날짜들을 반환한다', () => {
const wednesDay = new Date('2025-10-22');
const octorberFourth = getWeekDates(wednesDay);
expect(isDateInRange(wednesDay, octorberFourth[0], octorberFourth[6])).toBe(true);
});
// 솔루션
describe('getWeekDates', () => {
it('주중의 날짜(수요일)에 대해 올바른 주의 날짜들을 반환한다', () => {
const date = new Date('2025-07-09'); // 수요일
const weekDates = getWeekDates(date);
expect(weekDates).toHaveLength(7);
expect(weekDates[0].toISOString().split('T')[0]).toBe('2025-07-06'); // 일요일
expect(weekDates[6].toISOString().split('T')[0]).toBe('2025-07-12'); // 토요일
});
** 위와 비슷한 테스트에서도 다 동일하게 작성했는데, 여기서 팀원분의 피드백이 있었다.
팀원: 그 코드에서 isDateInRange 를 통해 도출하는데, 그러면 isDateInRange 도 테스트를 해야하는거 아닌가요? 하지만 지금 작성하신건 getWeekDates 함수인데, 다른 함수도 테스트해야하는 테스트 코드 방식은 좋지 않은것 같아요.
팀원2: 저도 동의하는게, 그럼 만약 isDateInRange 의 내용이 달라진다면 작성한 위 단위 테스트 코드조차 내용이 달라질거거든요.
나: 아하..! 정말 그렇네요..!
배운점.
1. 위와같이 하나의 함수를 테스트 할 때는 그 테스트만 테스트하는게 좋다.
2. describe로 크게 어떤 행동(?)을 할 지 정의하고, 그 안에 테스트를 it를 통해 구현, expect 해 테스트한다.
3. (발제 내용에도 이미 있었다)
// 내가 짠 부분
it('연도를 넘어가는 주의 날짜를 정확히 처리한다 (연말)', () => {
const lastDay = new Date('2025-12-31');
const week = getWeekDates(lastDay);
expect(formatWeek(week[0])).toBe('2026년 1월 1주');
expect(formatWeek(week[6])).toBe('2026년 1월 1주');
});
// 솔루션
it('연도를 넘어가는 주의 날짜를 정확히 처리한다 (연말)', () => {
const date = new Date('2024-12-30'); // 월요일
const weekDates = getWeekDates(date);
expect(weekDates[0].toISOString().split('T')[0]).toBe('2024-12-29'); // 일요일
expect(weekDates[6].toISOString().split('T')[0]).toBe('2025-01-04'); // 토요일
});
getWeekDates 를 테스트하는 코드에 formatWeek 를 사용했다 ㅎㅎ// 내가 짠 부분
describe('parseDateTime', () => {
it('2025-07-01 14:30을 정확한 Date 객체로 변환한다', () => {
expect(parseDateTime('2025-07-01', '14:30')).toEqual(new Date('2025-07-01T14:30:00'));
});
// 솔루션
describe('parseDateTime', () => {
it('2025-07-01 14:30을 정확한 Date 객체로 변환한다', () => {
const result = parseDateTime('2025-07-01', '14:30');
expect(result).toEqual(new Date('2025-07-01T14:30:00'));
});

// 내가 짠 부분
it('잘못된 날짜 형식의 이벤트에 대해 Invalid Date를 반환한다', () => {
const wrongMockEvent = { ...mockEvents[0], date: '202001010' };
expect(convertEventToDateRange(wrongMockEvent)).toEqual({
start: new Date(NaN),
end: new Date(NaN),
});
});
// 솔루션
it('잘못된 날짜 형식의 이벤트에 대해 Invalid Date를 반환한다', () => {
const event: Event = {
id: '5',
date: '2025/07/01', // 잘못된 형식
startTime: '14:30',
endTime: '15:30',
title: '잘못된 날짜 이벤트',
description: '',
location: '',
category: '',
repeat: { type: 'none', interval: 0 },
notificationTime: 0,
};
const result = convertEventToDateRange(event);
expect(result.start.toString()).toBe('Invalid Date');
expect(result.end.toString()).toBe('Invalid Date');
});
// 잘못된 형식 을 표기해준 부분.Invalid Date 를 해준 부분.통과에 급급해 남의 코드 보고 그대로 베껴쓰려니 내 양심에 찔려 못헀다. (물론 남의 코드 보면서 작성에 참고는 했는데 그대로 쓰지는 않으려 함)
과제 제출이 금요일인데, 어떻게든 완성해보려 애썼는데 시간을 보니 새벽 5시였다. 2시간 자고 출근해서 정신 못차리고 일하는 나를 보며 이건 아니다 싶었다.
2-1. 내 성장도 중요한데, 돈 받고 일하면 일하는 값은 해야지... 충분히 컨디션 조절해가며 허투루 시간쓰지 말고 시간을 잘 분배해 써야겠다 싶었다. (근데 아직 1주차거 되새기고있음 망했네)
메이트 분들과 많은 동료들이 과제 시작하면서, 과제 중간에도, 과제 끝날쯤에도 수많은 정보를 던져준다. 이 정보의 홍수에 어떻게 헤엄쳐야할까? 안볼수도 없는것 같고, 다들 어째 이렇게 빨리 확인하고 과제하나 싶긴하다.
첫 PR은 조졌다 볼 수 있다. 왜냐면 다 끝내지도 못했는데 5시에 비몽사몽하며 PR은 작성해야겠다 싶어서 그냥 흐르는대로 적었기 때문. 막상 WIL 적고있으니 조금 더 보이는 것 같은데, 다음 PR은 잘 쓰고 싶다 !
썸네일: 오늘 먹은 옥수수 피자, 진짜 맛있음. 남기고 온게 아쉬움