반응형
축구팀 관리 프로젝트 27일차 - 경기 생성 및 결과 테스트 코드 작성
현재 작업중인 포메이션 추천 로직을 위해 축구팀 경기데이터가 필요했습니다. 하지만 기획 및 테이블 구조상 외부에서 자료를 가져오기가 어려웠습니다. 그래서 Jest로 더미데이터를 만들었습니다.
Jest로 경기 데이터 만들기
사실 이전에 만들어놓은 jest 코드가 있었습니다. 하지만 이번에 다시 돌려보니 오류가 발생했었습니다. 원인을 찾아보니 팀원 정보 생성할 때 프로필 정보를 저장하는 로직이 있었는데, 그 API를 다른 팀원이 수정했었습니다. 그 변경된 부분이 반영되지 않아서 오류가 발생했었습니다.
이부분 수정하고, 추가로 경기 생성시 날짜 중복이 없도록 조건 추가도 하였습니다. 기존에는 startDate에서 endDate내에 랜덤으로 아무 날짜를 골라 경기를 생성했는데 그렇게 하게되니 하루에 두 세번 경기가 잡히는 문제가 생겼습니다. 이를 방지하고자 하루에 한 경기만 매칭되도록 날짜 중복을 없애는 로직을 만들었습니다.
//5) 경기 생성
it('/match/book/accept (POST)', async () => {
const startDate = new Date('2023-01-01T00:00:00.000Z');
const endDate = new Date('2024-12-31T00:00:00.000Z');
// API에서 받아온 경기 날짜 목록을 저장할 배열
let bookedDates = [];
// 서버 내부 API 호출을 통해 이미 예약된 경기 날짜 가져오기
try {
const response = await request(app.getHttpServer())
.get(`/match/team/${homeTeamId}`)
.set('Authorization', `Bearer ${accessTokenHome}`);
bookedDates = response.body.data.map(match => match.date);
} catch (error) {
console.error('API 호출 중 에러 발생:', error);
}
// 중복되지 않는 날짜 찾기
let randomDate, onlyDate;
do {
randomDate = faker.date.between({from:startDate, to:endDate});
onlyDate = randomDate.toISOString().split('T')[0];
} while (bookedDates.includes(onlyDate));
console.log('선택된 날짜(중복 없음):', onlyDate);
const registerMatchDto = {
date: onlyDate,
time: getRandomTime(),
homeTeamId,
awayTeamId,
fieldId,
token: `${accessTokenHome}`,
};
console.log('registerMatchDto:', registerMatchDto);
const response = await request(app.getHttpServer())
.post(`/match/book/accept`)
.set('Authorization', `Bearer ${accessTokenHome}`)
.send({
date: registerMatchDto.date,
time: registerMatchDto.time,
homeTeamId: Number(registerMatchDto.homeTeamId),
awayTeamId: Number(registerMatchDto.awayTeamId),
fieldId: Number(registerMatchDto.fieldId),
token: registerMatchDto.token,
})
.expect(201);
const parsedResponse = JSON.parse(response.text);
matchId = parsedResponse.id;
console.log('matchId=', matchId);
});
afterAll(async () => {
await app.close();
});
});
아직 완벽하게 동작하지는 못하지만 계속 수정을 거듭할 예정입니다.
▼ 이전 작업한 기록입니다 ▼
'내일배움캠프 > 축구팀 관리 프로젝트' 카테고리의 다른 글
축구팀 관리 프로젝트 34일차 - 유저테스트 시작, 취업 준비 (0) | 2024.02.14 |
---|---|
축구팀 관리 프로젝트 33일차 - 프로젝트 유저 테스트 준비 (0) | 2024.02.13 |
축구팀 관리 프로젝트 26일차 - 경기장 조회 페이지네이션 적용 (0) | 2024.02.06 |
축구팀 관리 프로젝트 25일차 - 2월부터 AWS Public IPv4 요금 부과 (0) | 2024.02.05 |
축구팀 관리 프로젝트 24일차 - 포메이션 추천 시나리오 작성 (1) | 2024.02.05 |