-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: 데이터 API 요청 처리 #9
Conversation
@leeyun1533 @Muscardinus94 데이터 fetch 작업을 완료해서 PR 드렸어요. 리뷰 부탁드립니다. 감사합니다! 🙇♂️ |
src/lib/utils/articleUtils.js
Outdated
|
||
export const getArticleList = () => ARTICLES; | ||
|
||
export const getArticleDetailById = (id) => ARTICLE_DETAILS.find((article) => article.id === id); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
결과값이 undefined도 좋지만 명시적으로 null 값을 반환하는것도 좋은거 같아요 :)
export const getArticleDetailById = (id) => ARTICLE_DETAILS.find((article) => article.id === id); | |
export const getArticleDetailById = (id) => ARTICLE_DETAILS.find((article) => article.id === id) ?? null; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
결과값이 undefined도 좋지만 명시적으로 null 값을 반환하는것도 좋은거 같아요 :)
명시적으로 null 값을 반환하는 것도 좋겠네요!
이 부분도 반영해 보겠습니다. 리뷰 감사합니다. 🙆🏻
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생 많으셨습니다!
try { | ||
const response = await request({ url: API_URL.ARTICLES }); | ||
return response; | ||
} catch (error) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P3: 아마 실무에서는 ErrorBoundary 또는 다른 방법으로 error를 캡처하실 것 같은데요, axios interceptor를 통해 에러를 처리하시는 것 어떠실까요? 시간이 되신다면 센트리 로그 설계까지 부탁드리고 싶지만 이부분은 다음 프로젝트 때 하셔도 무방합니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P3: 아마 실무에서는 ErrorBoundary 또는 다른 방법으로 error를 캡처하실 것 같은데요, axios interceptor를 통해 에러를 처리하시는 것 어떠실까요? 시간이 되신다면 센트리 로그 설계까지 부탁드리고 싶지만 이부분은 다음 프로젝트 때 하셔도 무방합니다!
UI구현 이후에 axios를 사용하여 데이터 핸들링 해보겠습니다.
sentry를 활용해보지 못했어서 프로젝트 마무리되면 찾아봐야겠어요. 🙆🏻
import { rest } from 'msw'; | ||
import { isObjectEmpty } from '../utils/apiUtils'; | ||
|
||
export const mockServer = ({ method, path, statusCode, responseCallback }) => |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 👍 추후 프로젝트에도 이함수는 계속 사용될 것 같아요.
참고로 oas generator 같은 친구들을 사용하면 api function, msw 등을 자동화할 수 있습니다.
src/lib/utils/articleUtils.test.js
Outdated
import { getArticleList, getArticleDetailById } from './articleUtils'; | ||
import { ARTICLE_DETAILS, ARTICLES } from './constant'; | ||
|
||
describe('Article 데이터에 대한 단위 테스트', () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P3: 이미 잘 작성해주셨는데요! 가독성 측면에서 describe 중첩등 살짝 개선해보았습니다.
만약 에러 상태까지 테스트 한다면 이 테스트도 상당히 발전할 수 있을 것 같아요
import { getArticleList, getArticleDetailById } from './articleUtils';
import { ARTICLE_DETAILS, ARTICLES } from './constant';
describe('getArticleList 함수를 테스트합니다.', () => {
test('Article List를 가져옵니다.', () => {
const articles = getArticleList();
expect(articles).toEqual(ARTICLES);
});
});
describe('getArticleDetailById 함수를 테스트합니다.', () => {
test('id가 1인 Article Detail 데이터를 정상적으로 가져오는지 확인합니다.', () => {
const id = 1;
const expectedArticle = ARTICLE_DETAILS[2];
const article = getArticleDetailById(id);
expect(article).toEqual(expectedArticle);
});
test('id의 Article Detail 데이터가 없을 경우 null이 반환되는지 확인합니다.', () => {
const id = 0;
const article = getArticleDetailById(id);
expect(article).toBe(null);
});
});
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
P3: 이미 잘 작성해주셨는데요! 가독성 측면에서 describe 중첩등 살짝 개선해보았습니다.
만약 에러 상태까지 테스트 한다면 이 테스트도 상당히 발전할 수 있을 것 같아요
import { getArticleList, getArticleDetailById } from './articleUtils'; import { ARTICLE_DETAILS, ARTICLES } from './constant'; describe('getArticleList 함수를 테스트합니다.', () => { test('Article List를 가져옵니다.', () => { const articles = getArticleList(); expect(articles).toEqual(ARTICLES); }); }); describe('getArticleDetailById 함수를 테스트합니다.', () => { test('id가 1인 Article Detail 데이터를 정상적으로 가져오는지 확인합니다.', () => { const id = 1; const expectedArticle = ARTICLE_DETAILS[2]; const article = getArticleDetailById(id); expect(article).toEqual(expectedArticle); }); test('id의 Article Detail 데이터가 없을 경우 null이 반환되는지 확인합니다.', () => { const id = 0; const article = getArticleDetailById(id); expect(article).toBe(null); }); });
제가 작성한 내용보다 훨씬 깔끔해진 것 같아요! 👍
오류 상황 테스트 코드를 조금 더 추가해서 반영해 보았습니다.
두 분 다 리뷰 감사합니다! |
작업 주제
작업 내용(어떤 부분을 리뷰어가 집중해서 봐야할까요?)
화면 스크린샷
관련 Docs
wiki: https://github.com/f-lab-edu/toss-tech-router/wiki/04.-%EB%8D%B0%EC%9D%B4%ED%84%B0-API-%EC%9A%94%EC%B2%AD-%EC%B2%98%EB%A6%AC
추가 코멘트
체크리스트(PR 올리기 전 아래의 내용을 확인해주세요.)
리뷰 규칙