-
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
taken lectures api/#35 #36
Conversation
๐storybook: https://65ccb85d5afe55a024495bc0-cotzkskzqa.chromatic.com/ |
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.
- ์๊ณ ํ์ จ์ต๋๋ค. ์์ ํ์ ๋ด์ฉ์ ๊ผผ๊ผผํ ๊ฒํ ํ์์ต๋๋ค.
- ๋ช ๊ฐ์ง ์๊ฒฌ๊ณผ ์ ์์ ๋จ๊ฒผ์ต๋๋ค. ํ์ธํ์๊ณ ์๊ฒฌ์ ๋ถํ๋๋ฆฝ๋๋ค.
const response = await fetch(API_PATH.takenLectures); | ||
const data = await response.json(); | ||
return data; |
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.
[comment]
- ํ์ฌ ์๊ตฌ์ฌํญ์๋ ์๋ฌ ๋ฐ์ ์์ ์ฒ๋ฆฌ ๋ฐฉ์์ด ํฌํจ๋์ด ์์ง ์์ต๋๋ค. ์ด ๋ถ๋ถ์ ๋ํ ์ ์๊ฐ ํ์ํ๋ฏ๋ก, ํ๊ณ ์๊ฐ์ ๋ ผ์ํด๋ด ์๋ค!
type ListRootProps = { | ||
data: (string | number)[][]; | ||
render: (item: (string | number)[], index: number) => ReactNode; |
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.
[comment]
- ์ ๋ค๋ฆญ์์ string์ด๋ number๋ก๋ง ํ์ ์ ์ ํํ ์ด์ ๊ฐ ์์๊น์?
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.
table column์๋ string number ์ธ ๋ฐ์ดํฐ ํ์ ์ด ๋ค์ด์ฌ ์ํฉ์ด ์์ ๊ฒ ๊ฐ์์ ์ ํ์ ์์ผฐ์ต๋๋ค!
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.
[request change]
- ์ ์๊ฐ์๋ ํ์ฌ 'taken-lecture-title' ์ปดํฌ๋ํธ์ ๋ถ๋ฆฌ ์์ค์ ๊ณ ๋ คํ์ ๋, 'taken-lecture-title' ์ปดํฌ๋ํธ๊ฐ view ์ปดํฌ๋ํธ๋ก ๋ ์ ์ ํด ๋ณด์
๋๋ค. ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- 'taken-lecture-title' ์ปดํฌ๋ํธ ๋ด๋ถ์๋ ๋น์ฆ๋์ค ๋๋ฉ์ธ ๋ก์ง์ด ์์ต๋๋ค.
- ๋ฐ๋ผ์ 'taken-lecture-title' ์ปดํฌ๋ํธ๋ ํ์ฌ view ๊ด์ฌ์ฌ๋ง์ ์ํํ๊ณ ์์ต๋๋ค.
- view ๊ด์ฌ์ฌ๋ props๋ฅผ ๋ฐ์ ํ๋ฉด์ ๊ทธ๋ ค์ฃผ๋ presentational component๋ฅผ ๋ปํฉ๋๋ค.
- 'ํ์ฌ ๋ถ๋ฆฌ ์์ค'์ด๋ผ๊ณ ๋งํ ๊ฒ์ '์ปค์คํ
ํ๊ธฐ'์ '์
๋ฐ์ดํธ' ๋ฒํผ์ ๋๋ฉ์ธ ๋ก์ง์ด ์ถ๊ฐ๋ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ง์ฝ ๊ทธ๋ ๊ฒ ๋๋ค๋ฉด 'taken-lecture-title' ์ปดํฌ๋ํธ๋ props๋ก ๋ฒํผ์ ๋ฐ๋ ๊ฒ์ด ์๋๋ผ, ๋ด๋ถ์์ ์์ฒด์ ์ผ๋ก '์ปค์คํ
ํ๊ธฐ'์ '์
๋ฐ์ดํธ' ๋ฒํผ์ ๋ ๋๋งํ๊ฒ ๋ฉ๋๋ค. ํด๋น ๋น์ฆ๋์ค ๋๋ฉ์ธ ๋ก์ง์ด 'taken-lecture-title' ์ปดํฌ๋ํธ์ ์์นํ๋ค๋ฉด, ๋๋ฉ์ธ ์ปดํฌ๋ํธ๊ฐ ๋ ์ ์ ํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
- ๊ฒฐ๊ตญ ๋๋ฉ์ธ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ๊ธฐ ์ํด์๋ ํด๋น ๋ฒํผ์ props๋ก ๋ฐ๋ ๊ฒ์ด ์๋๋ผ, ๋ด๋ถ์์ ๋ ๋๋งํ๊ณ ๊ฑฐ๊ธฐ์ ๋น์ฆ๋์ค ๋๋ฉ์ธ ๋ก์ง์ ์์ฑํ ํ์๊ฐ ์์ด๋ณด์ด๋ค์!
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.
์ ๋๋ฉ์ธ ๋ก์ง์ด ํฌํจ๋์ด์์ง ์๊ณ ๋ ๋๋ง๋ง ํ๋ค๋ ๊ด์ ์์๋ view component๊ฐ ์ ์ ํ ๊ฒ ๊ฐ๋ค์!
์ ๋ ๋๋ฉ์ธ ์ปดํฌ๋ํธ์ ์ ์๋ฅผ ๋๋ฉ์ธ์ ์ข
์๋๋ค๊ณ ์๊ฐํด์ ๊ทธ๋ ๊ฒ ๋ถ๋ฆฌ๋ฅผ ํ์ต๋๋ค!
taken lecture title์ "๊ธฐ์ด์ ๊ณผ๋ชฉ์ ๋ํ ์ ๋ณด(์ ๋ชฉ)์ ๋ ๋๋งํ๋ค" ๋ผ๋ ์ญํ ๋ก ์ ์ํ ์ ์๊ณ ์ญํ ์ด ๋๋ฉ์ธ์ ์ข
์ ๋๋ค๊ณ ์๊ฐํด์ ๋๋ฉ์ธ ์ปดํฌ๋ํธ๋ก ๋ถ๋ฆฌํ์ต๋๋ค
ํน์ ์ด์ ๋ํด์๋ ์ด๋ป๊ฒ ์๊ฐํ์๋์??
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.
- ์ข์ ์๊ฒฌ์ด๋ค์. "๊ธฐ์ด์ ๊ณผ๋ชฉ์ ๋ํ ์ ๋ณด(์ ๋ชฉ)์ ๋ ๋๋งํ๋ค"๋ผ๋ ์ญํ ๋ก ์ ์ํ๋ฉด ๋๋ฉ์ธ ์ปดํฌ๋ํธ๊ฐ ๋ง์ต๋๋ค. ํ์ง๋ง ์ ์๊ฒฌ์ผ๋ก ํ์ฌ taken lecture title ์ปดํฌ๋ํธ๊ฐ ํด๋น ์ญํ ์ ์ถฉ์คํ ์ํํ๊ณ ์๋ค๊ณ ๋ณด์ด์ง๋ ์์ต๋๋ค. ์ด ๋ถ๋ถ์ ๋ํด ํ๊ณ ์๊ฐ์ ๋ ์ด์ผ๊ธฐํด ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค์!
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.
[comment]
- ๋๋ฉ์ธ ์ปดํฌ๋ํธ๊ฐ ์ ์ ํ๊ฒ ์์ฑ๋ ๊ฒ ๊ฐ์ต๋๋ค.
- ๋ํ, ์ ๋ ๋๋ฉ์ธ ์ปดํฌ๋ํธ์ ๋ํ ํ ์คํธ๊ฐ ๋ฐ๋์ ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋์ ๋๋ฉ์ธ ์ปดํฌ๋ํธ์ ๋ํ ํ ์คํธ ์์ฑ์ ์ ์ํ๊ณ ์ ํ๋๋ฐ, ๋ค๋ฅธ ๋ถ๋ค์ ์๊ฒฌ์ ์ด๋ ์ ๊ฐ์?
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.
๋๋ฉ์ธ ์ปดํฌ๋ํธ์ ๋ํ ํ ์คํธ๊ฐ ๋ฐ๋์ ํ์ํ๋ค๊ณ ์๊ฐํ์๋ ์ด์ ๋ฅผ ์ฌ์ญค๋ณผ ์ ์์๊น์?
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.
์.. ์ ๊ฐ ์ ์ ๋ง์ด ๊ณ ๋ฏผํ๋ ์ฃผ์ ๋ผ ๊ณ ๋ฏผ์ ํ๋ฆ์ ๋จ๊ฒจ๋ณด๊ฒ ์ต๋๋ค. ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ๋ค์ :)
- ์ฒซ ๋ฒ์งธ๋ก ๊ณ ๋ คํด์ผ ํ ์ค์ํ ์ง๋ฌธ์ "์ด๋ค ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๊ฐ์ฅ ํจ๊ณผ์ ์ผ๊น?"์ ๋๋ค. 'ํจ๊ณผ์ '์ด๋ ๊ฐ์ฅ ์ ์ ํ ์ฝ๋์ ์์ผ๋ก "์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋๋๋ก ๋์ํจ์ ๊ฒ์ฆ"ํ๋ ํ ์คํธ์ ๋ชฉ์ ์ ๋ฌ์ฑํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ณผ์ ์์ ๋ชจ๋ ๊ฒ์ ๋ํ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ง๋ฃจํ๊ณ , ์๋นํ ์๋ชจ์ ์ด๋ฉฐ ๋๋ก ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์, ์ด๋ป๊ฒ ๊ฐ์ฅ ์ ์ ํ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ๊ฒ์ธ์ง์ ๋ํ ๊ณ ๋ฏผ์ด ํ์ํฉ๋๋ค. ์ด ์ง๋ฌธ์ ๋ํ ๋ต์ ์ฐพ๊ธฐ ์ํด ์ฌ๋ฌ ์ฐธ๊ณ ์๋ฃ๋ฅผ ๊ฒํ ํ์ต๋๋ค.
- ๊ฐ์ฅ ๋จผ์ ์ดํด๋ณธ ๊ฒ์ ๋งํด ํ์ธ๋ฌ์ "ํ
์คํธ ํผ๋ผ๋ฏธ๋"์
๋๋ค. ๊ฐ๋จํ ๋งํ๋ฉด, ์ ๋ ํ
์คํธ > ํตํฉ ํ
์คํธ > E2E ํ
์คํธ์ ์์๋ก ํ
์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์
๋๋ค. FE ๊ด์ ์์๋ ๋ก์ง์ ๊ฐ์ง ํ
๊ณผ ์ปดํฌ๋ํธ๊ฐ ์ ๋ ํ
์คํธ ๋จ์๋ผ๊ณ ์๊ฐํ ์ ์์ต๋๋ค. ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ ์๋์ ์ฒจ๋ถ๋ ๊ธ์ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
์๋ฌธ: https://martinfowler.com/bliki/TestPyramid.html
๋ฒ์ญ: https://blog.voidmainvoid.net/451
(์๋ฌธ์ ์ฝ๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค. ์ฐธ๊ณ ๋ก ๋งํด ํ์ธ๋ฌ๋ ์ ๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ํ๋ก๊ทธ๋๋จธ ์ค ํ๋ช ์ ๋๋ค) - ํ์ง๋ง "ํ ์คํธ ํผ๋ผ๋ฏธ๋"์ ๋ํด ์๋ฌธ์ด ์๊ฒผ์ต๋๋ค. ๊ทธ ์๋ฌธ์ "FE์์๋ ์ด 'ํ ์คํธ ํผ๋ผ๋ฏธ๋'๊ฐ ์ ํจํ๊ฐ?"์ ๋๋ค. ์ ๊ฒฝํ์ BE ๊ด์ ์์๋ ํ ์คํธ ํผ๋ผ๋ฏธ๋๊ฐ ์ ํจํฉ๋๋ค. ์ด๋ ๋๋ฉ์ธ > ์ ํ๋ฆฌ์ผ์ด์ > ์ด๋ํฐ์ ์์กด์ฑ ํ๋ฆ์ด ์ ๋ ํ ์คํธ > ํตํฉ ํ ์คํธ > E2E ํ ์คํธ์ ํ๋ฆ๊ณผ ์ผ์นํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ FE์์๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ปดํฌ๋ํธ๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ๊ณ์ธต์ ๊ฐ์ง๋ฉฐ, ๋์ ๋ฐ๋์ ๊ฒฐํฉํด์ ์๋ํฉ๋๋ค. ์ฆ, ๋ก์ง๊ณผ ์ปดํฌ๋ํธ๊ฐ ๊ฒฐํฉ๋์ด ์ ๋๋ก ๋์ํ๋ ๊ฒ์ ํ์ธํด์ผ "์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋๋๋ก ์๋ํ๋ ๊ฒ์ ๊ฒ์ฆ"ํ๋ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ ์ ์์ต๋๋ค. ํ์ง๋ง ์๋ฐํ ๋งํ๋ฉด, ๋น์ฆ๋์ค ๋ก์ง๊ณผ ์ปดํฌ๋ํธ๊ฐ ๊ฒฐํฉ๋ ํ ์คํธ(๋๋ฉ์ธ ์ปดํฌ๋ํธ๋ผ๊ณ ํ ์ ์์ต๋๋ค)๋ ํตํฉ ํ ์คํธ์ ๊ฐ๊น์ต๋๋ค.
- ์ด ์๋ฌธ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์ํ ์ฌ๋๋ค์ ์๊ฒฌ์ ์์งํ๊ณ , ์ด ๋ฌธ์ ๊ฐ ๋๋ง์ ๋ฌธ์ ๊ฐ ์๋๋ผ๋ ์ฌ์ค์ ๊นจ๋ฌ์์ต๋๋ค.
- ์์ฝํ๋ฉด, ๋งํด ํ์ธ๋ฌ์ "ํ ์คํธ ํผ๋ผ๋ฏธ๋"๋ ๊ตฌ์์ด๋ฉฐ, ํตํฉ ํ ์คํธ๋ฅผ ์ ๋ ํ ์คํธ๋ณด๋ค ๋ง์ด ์์ฑํ๋ ๊ฒ์ด ๋ ํ๋ช ํ๋ค๋ ์ฃผ์ฅ์ ๋๋ค. ์ด ํ ์คํธ ๋ชจ๋ธ์ FE ๋ถ์ผ์์๋ "ํธ๋กํผ ํ ์คํธ"๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
- ๊ทธ ๋ค์์ผ๋ก ํธ๋กํผ ํ
์คํธ์ ๊ฐ๋
์ ์ ์ํ ์ฌ๋์ธ Kent C.Dodds์ ๊ธ์ ์ฐพ์ ์ฝ์์ต๋๋ค. ๊ทธ์ ๊ธ์ ์์ฝํ๋ฉด, ํตํฉ ํ
์คํธ๋ ์ ๋ ํ
์คํธ๋ณด๋ค ๋ ์ ์ ์ฝ๋๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์๋๋๋ก ์๋ํจ์ ๋ ์ ๋ณด์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ํตํฉ ํ
์คํธ๋ฅผ ์์ฑํด์ผ ํ๋ค๊ณ ํฉ๋๋ค. ํด๋น ๊ธ์ ์๋์ ์ฒจ๋ถํฉ๋๋ค.
Write tests. Not too many. Mostly integration: https://kentcdodds.com/blog/write-tests
("Not too many. Mostly integration"์ด๋ผ๋ ์ ๋ชฉ์ด ์ธ์์ ์ ๋๋ค. ์ฐธ๊ณ ๋ก, Kent C.Dodds๋ ์ ๋ช FE ๊ฐ๋ฐ์์ด๋ฉฐ RTL๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค.) - ์ ๋ฆฌํ๋ฉด ์ฐ๋ฆฌ๋ โ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋๋๋ก ๋์ํจโ์ ๋ณด์ฅํ๊ธฐ ์ํด์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด์ผํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ์ ์๊ฐ์ ์ ํ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ค ํ ์คํธ์ ์๊ฐ์ ํฌ์ํ ์ง ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ์ ํต์ ์ธ "ํ ์คํธ ํผ๋ผ๋ฏธ๋" ๋ชจํ์ด ์์ง๋ง, ์ด๋ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ํ๋ก ํธ์๋์๋ ์ ํฉํ์ง ์์ต๋๋ค. ์ด๋ ์ ๋ํ ์คํธ๊ฐ ๋ ๋ง์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋๋ก ์๊ตฌํ๋ฉฐ, ํ๋ก ํธ์๋์์๋ ์ ๋ํ ์คํธ ํต๊ณผ๊ฐ ์๋ํ ๋์์ ๋ณด์ฅํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค(์ด๋ ๋ก์ง๊ณผ ์ปดํฌ๋ํธ๊ฐ ๊ฒฐํฉ๋ ํ๋ก ํธ์๋์ ํน์ฑ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค). ์ด์ ๋ํ ๋์์ผ๋ก, ํตํฉ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ ์ํฉ๋๋ค. ์ด๋ฅผ ๊ฐ๋ ์ ์ผ๋ก ํธ๋กํผ ํ ์คํธ ๋ชจํ์ด๋ผ ๋ถ๋ฅด๋ฉฐ, ์ฐ๋ฆฌ ํ๋ก์ ํธ์์๋ ๋๋ฉ์ธ ์ปดํฌ๋ํธ์ ๋ํ ํ ์คํธ๊ฐ ์ ํฉํ๋ค๊ณ ํ๋จํ์ต๋๋ค.
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.
(๋ฒ์ธ): ๋งํด ํ์ธ๋ฌ๊ฐ ํ ์คํธ ํผ๋ผ๋ฏธ๋์ ๋ํ ๋ ผ๋์ ๋ตํ ๊ธ์ด ์์ต๋๋ค. ๊ทธ๋ ์ฌ๋๋ค์ด ํตํฉ ํ ์คํธ์ ๊ดํ ์คํด๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ์ง์ ํ๋ฉฐ, ์์ ์ ์๊ฐ์ ๋ฐ๋ฅด๋ฉด ํตํฉ ํ ์คํธ๋ ๊ฐ๋ฐ์๊ฐ ์๋ ๋ค๋ฅธ ์ฌ๋์ด ์์ฑํ ํ ์คํธ ์ฝ๋๋ก ํ ์คํธํ๋ ๊ฒฝ์ฐ๋ฅผ ๊ฐ๋ฆฌํจ๋ค๊ณ ๋ฐํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๋๋ค์ด ์ผ๋ฐ์ ์ผ๋ก ์ด์ผ๊ธฐํ๋ ํตํฉํ ์คํธ (์ฆ, ํธ๋กํผ ํ ์คํธ์ ํด๋นํ๋ ํตํฉํ ์คํธ)๋ ์์ ์ด ์ ์ํ sociable unittest์ ํด๋นํ๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ์ธ๊ธ๋๋ ์ ๋ํ ์คํธ๋ solitary unittest์ ํด๋นํ๋ค๊ณ ์ค๋ช ํ์ต๋๋ค. ๊ด์ฌ ์์ผ์๋ฉด ์๋ ๋งํฌ ์ฝ์ด๋ณด์ธ์!
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.
ํ
์คํธ๋ฅผ ํด์ผ ํ๋ ์ด์ ์ ๋ํด ํ์ธํ์ต๋๋ค!
์ถ๊ฐ์ ์ผ๋ก ์ ๋ ๊ถ๊ธํ๊ฒ ์๋๋ฐ, ๋๋ฉ์ธ ์ปดํฌ๋ํธ์ ๋ํ ํ
์คํธ ์์ฑ์ด ์ธ์ ์ ํฉํ๋ค๊ณ ์๊ฐํ๋์?
์ ๋ ์ปดํฌ๋ํธ์ ๋ํ ๋น์ฆ๋์ค ๋ก์ง์ ๋ค ๊ตฌํํ ํ์ ์งํํ๋ ๊ฒ์ด ์ ํฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค!
์ด์ ๋ ์๋์ ๊ฐ์ต๋๋ค
- ๊ฐ๋ฐ์ ํ๋ฉด์ tdd๋ฅผ ํ ๋งํผ ๊ฒ์ฆํด์ผ ์์ธ ์ผ์ด์ค๊ฐ ๋ง์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค
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.
ํด๋น ๋ถ๋ถ์ ๋ํด์ ์ ์ ์๊ฒฌ์ ๋ง์๋๋ฆฌ๋ฉด ํ ์คํธ๋ ๊ฐ๋ฐ๊ณผ ๋์์ ์ด๋ค์ ธ์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ๋ถ๋ถ์ ํ๊ณ ์๊ฐ์ ๋ง์ ๋ ผ์ํ๋๋ก ํฉ์๋ค!
type lectureInfo = { | ||
id: number; | ||
year: string; | ||
semester: string; | ||
lectureCode: string; | ||
lectureName: string; | ||
credit: number; | ||
}; |
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.
๋ ๋ฒ ์ด์ ์ฌ์ฉ๋๋ ๊ณตํต๋ ํ์ ์ ๋ํด์ ํ์ผ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ ์ด๋จ๊น ์ ์๋๋ ค์ :)
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.
lecture info ํ์ ์ taken lecture์์ ํ ๋ฒ ์ฌ์ฉ๋๋๋ฐ ๋ ๋ฒ ์ด์ ์ฌ์ฉ๋๋ค๋ ๊ฒ ์ด๋ค ๋ง์์ด์ ์ง ์กฐ๊ธ ๋ ์๋ ค์ฃผ์ค ์ ์๋์1?
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.
app/ui/taken-lectures/taken-lecture-list.tsx
์์ ์ฌ์ฉ๋๊ณ ์๋
const parseTakenLectures = (subjects: TakenLectures['takenLectures']) =>
๋ถ๋ถ์์ ์ฐฉ๊ฐํ ๊ฒ ๊ฐ์ต๋๋ค. ํด๋น ๋ถ๋ถ์ ๊ทธ๋๋ก ์งํํด๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฃ์กํฉ๋๋ค :)
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.
taken-lecture-title์ด๋ผ๋ ๋ค์ด๋ฐ์ด ์ ์ ํ์ง์๋ค๋ ์๊ฐ์ด ๋ญ๋๋ค. ํด๋น ์ปดํฌ๋ํธ๊ฐ ๊ฒฐ๊ณผ ํ์ด์ง์์๋ ์ฌ์ฌ์ฉ๋ ๊ฒ์ผ๋ก ์์๋๋๋ฐ, ๊ธฐ์ด์๊ณผ๋ชฉ ๋ฟ๋ง์๋๋ผ ๋ฏธ์ด์๊ณผ๋ชฉ์ ํ์ํ ๋๋ ํจ๊ป ๋ ธ์ถ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ฒฐ๊ณผํ์ด์ง์์ ํด๋น ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฌ์ฉํด์ ๋
ธ์ถํ ๊ฒ์ผ๋ก ์์๋๋ (ํ์ฌ ๋ค์ ํ์ /
๊ธฐ์ค ํ์ )์ ๋ณด๊ฐ ๋ฏธ์ด์ ๊ณผ๋ชฉ ํ์์์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ์๋ ๊ธฐ์ด์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋
ธ์ถ ํ๊ณ ์์ง๋ง, ์ด๋ ๊ธฐ์ด์์ ๋ํ title์ด ์๋๋ผ table์ ๋ํ ์ ๋ณด๋ฅผ ๋
ธ์ถํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ฐ๋ผ์,
- table-info ๋ค์ด๋ฐ์ ๋ณ๊ฒฝํ๊ณ
- ๋ฐ๋์ ํด๋น ์ด๋ฆ์ผ ํ์๋ ์๊ณ , table์ ์์กดํ ๋ค์ด๋ฐ
- view์ปดํฌ๋ํธ๋ก ์์น
์ํค๋๊ฒ์ด ์ ์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
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.
๋ฏธ์ด์ ๊ณผ๋ชฉ ํ์์๋ ๋
ธ์ถ๋๋ ๊ฑธ ์๊ฐํ์ง ๋ชปํ๋ค์! taken lecture์์ lecture๋ก ๋ณ๊ฒฝํ๊ฒ ์ต๋๋ค!
table์ ์์กดํ ๋ค์ด๋ฐ์ ๋ง์ํ์
จ๋๋ฐ ์๋ ๊ฐ์ ๊ฒฝ์ฐ์๋ taken-lecture-title ์ปดํฌ๋ํธ๋ ์ฌ์ฉ๋ ์์ ์
๋๋ค!
table์ ์์กดํ ๋ค์ด๋ฐ์ ๊ฐ์ ธ๊ฐ๊ธฐ์ ์ ๋งคํ๋ค๊ณ ์๊ฐํ๋๋ฐ ํน์ ์ด๋ป๊ฒ ์๊ฐํ์๋์!? ( ์ ๋ฒ์ ์นดํ์์ ์ ํฌ๋ผ๋ฆฌ ์๊ธฐํ๋ ๊ฑฐ,,,,,, ๊ธฐ์ตํ์๋์ฌ??)
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.
๋ชจํธํ ๋ถ๋ถ์ด ์๋ค๋ ์๊ฒฌ์ ๋ํด์ ๊ณต๊ฐํฉ๋๋ค. table์์ ์์กด์ฑ์ ๊ฐ์ ธ๊ฐ๊ธด ์ด๋ ค์ธ ๊ฒ ๊ฐ๋ค์.
์ ๋ฒ์ ์นดํ์์ ์ ํฌ๋ผ๋ฆฌ ์๊ธฐํ๋ ๊ฑฐ,,,,,, ๊ธฐ์ตํ์๋์ฌ??
์ฌ์ฌํ ์ฌ๊ณผ์ ๋ง์...์ ์ ํ๋ฉฐ, ์ ํํ ๋ํ์ ํ๋ฆ์ ๊ธฐ์ต์ด ๋์ง์์ง๋ง ๋น์์๋ ๋น์ทํ ๋ฌธ์ ๋ก ์ด์ผ๊ธฐ๋ฅผ ๋๋ด๋ ๊ฒ์ผ๋ก ๊ธฐ์ตํ๊ณ ์์ต๋๋ค. lecture-info
๋ฑ ์ฌ๋ฌ ํ๋ณด๊ตฐ์ด ์์๋ ๊ฒ์ผ๋ก ๊ธฐ์ตํ๋๋ฐ ํด๋น ๋ค์ด๋ฐ์ ๋ด์ผ ํ์๋ ์ด์ผ๊ธฐํด๋ด๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค !
๐storybook: https://65ccb85d5afe55a024495bc0-mxiftbdeys.chromatic.com/ |
๐storybook: https://65ccb85d5afe55a024495bc0-xfmkyaejxw.chromatic.com/ |
๐storybook: https://65ccb85d5afe55a024495bc0-bldkebbebp.chromatic.com/ |
@seonghunYang @yougyung
jest์์ next js server component ๋ฅผ ์ง์ํ์ง ์๋ ๊ฒ ๊ฐ๋๋ผ๊ตฌ์ |
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.
- ์๊ณ ํ์ จ์ต๋๋ค. comment ๋จ๊ฒผ์ผ๋ ํ์ธ ๋ถํ๋๋ ค์.
@@ -0,0 +1,15 @@ | |||
import { fetchTakenLectures } from '@/app/business/lecture/taken-lecture-list.query'; | |||
import { Table } from '../view/molecule/table'; | |||
import TakenLectureTitle from './taken-lecture-title'; |
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.
[comment]
- ํ์ผ์ด๋ ์ปดํฌ๋ํธ ์ด๋ฆ์ด TakenLectureLabel๋ก ์์ง ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒ ๊ฐ๋ค์!
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.
์์ ํ์ต๋๋ค! ์๋ ค์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค
rename: taken lecture title -> taken lecture label
describe('Taken lecture list', () => { | ||
it('๊ธฐ์ด์ ๊ณผ๋ชฉ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ค๋ค.', async () => { | ||
render(await TakenLectureList()); | ||
expect(await screen.findByTestId('table-data')); |
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.
[comment]
- test-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.
๊ธฐ์ด์ ๊ณผ๋ชฉ ๋ฆฌ์คํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ํธ์ถํด์ ์ ๋ ๋๋ง ํ๋ ์ง ํ์ธํด์ผ ํ์ต๋๋ค!
๋ค๋ฅธ ํ
์คํธ์ฒ๋ผ findByText ๋ฅผ ์ด์ฉํ๊ธฐ์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ๋ค์ด์ฌ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ test id๋ฅผ ์ฌ์ฉํ์ต๋๋ค!
๋ฐ์ดํฐ๊ฐ ๋ฌธ์ ์์ด ํธ์ถ๋๋ฉด table์ด ์ ์์ ์ผ๋ก ๋ ๋๋ง ๋ ๊ฒ์ด๋ผ๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์
๋๋ค~!
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.
- ๋ค, ๊ฐ์ฌํฉ๋๋ค. ๋ง์ํ์ ๋๋ก test-id๊ฐ ์ ์ ํด ๋ณด์ด๋ค์!
- ์๋๋ ํ
์คํธ์์ ์์๋ฅผ ์ ํํ๋ ๋ฒ ์คํธ ํ๋ํฐ์ค๋ฅผ ์ ๋ฆฌํ ๋ฌธ์์
๋๋ค. ์ฐธ๊ณ ํ์๋ฉด ๋์์ด ๋ ๊ฒ ๊ฐ์ ๊ณต์ ํฉ๋๋ค
https://docs.cypress.io/guides/references/best-practices#Selecting-Elements
๐storybook: https://65ccb85d5afe55a024495bc0-tixikokpcd.chromatic.com/ |
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.
์์ ์ฌํญ ํ์ธํ์ต๋๋ค. ์๊ณ ํ์ จ์ด์ ๐
@@ -0,0 +1,20 @@ | |||
import { API_PATH } from '../api-path'; | |||
|
|||
type lectureInfo = { |
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.
์ปจ๋ฒค์ ํ์ธ ๋ถํ๋๋ฆฝ๋๋ค :)
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.
์์ ํ์ต๋๋ค! ์๋ ค์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค:)
chore: modifying type name to Pascal Case
๐storybook: https://65ccb85d5afe55a024495bc0-oimomfqbux.chromatic.com/ |
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.
- ์๊ณ ํ์ จ์ต๋๋ค.
describe('Taken lecture list', () => { | ||
it('๊ธฐ์ด์ ๊ณผ๋ชฉ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ค๋ค.', async () => { | ||
render(await TakenLectureList()); | ||
expect(await screen.findByTestId('table-data')); |
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.
- ๋ค, ๊ฐ์ฌํฉ๋๋ค. ๋ง์ํ์ ๋๋ก test-id๊ฐ ์ ์ ํด ๋ณด์ด๋ค์!
- ์๋๋ ํ
์คํธ์์ ์์๋ฅผ ์ ํํ๋ ๋ฒ ์คํธ ํ๋ํฐ์ค๋ฅผ ์ ๋ฆฌํ ๋ฌธ์์
๋๋ค. ์ฐธ๊ณ ํ์๋ฉด ๋์์ด ๋ ๊ฒ ๊ฐ์ ๊ณต์ ํฉ๋๋ค
https://docs.cypress.io/guides/references/best-practices#Selecting-Elements
๐ ์์ ๋ด์ฉ
๐ค ๊ณ ๋ฏผ ํ๋ ๋ถ๋ถ
ํ ์ด๋ธ ์ปดํฌ๋ํธ์ ๋ํ ๋ฆฌํฉํ ๋ง
์๋ํ ๊ฑด ์๋์ง๋ง data์ ํ์ ์ ๊ฐ์ฒด๋ก ๋ณ๊ฒฝํ ํ parseTakenLecture ๋ผ๋ ํจ์๋ ๋ถํ์ํด์ ธ์ ์ ๊ฑฐํ์ต๋๋ค!