generated from Bside-Team-Four/nextjs-starter
-
Notifications
You must be signed in to change notification settings - Fork 2
๐ฆ FE Guide
JaeMeDev edited this page Mar 16, 2023
·
1 revision
- PR์ 4์ผ ๊ฐ๋ฐํ ๊ฐ์ด๋์ ๋ง์ถฐ์ ์งํ.
- Merge ์งํ์์๋ Squash Merge๋ฅผ ์งํํ๋ค. Squash Merge ์งํ์ History๋ฅผ ๋ ๊น๋ํ๊ฒ ๋ณผ ์ ์์.
- ์ฝ๋ ๋ฆฌ๋ทฐ๋ ์๋๋ฐฉ์ด ๊ธฐ๋ถ๋์์ง ์๊ฒ ์น์ ํ๊ฒ ์งํํ๋ฉฐ, ๋ฆฌ๋ทฐ ์ธ์ ๊ถ๊ธํ ์ ์ Slack์ผ๋ก ์ง๋ฌธํ๋ค.
- ๋ฆฌ๋ทฐํ ๊ฒ ์์ผ๋ฉด ์ด๋ชจ์ง๋ผ๋ ๋จ๊ฒจ์ค๋ค.
- React ์ปดํฌ๋ํธ ์ ์์
function
ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๊ทธ ์ธ์ ํจ์ ์์ฑ ์Arrow Function(() โ void)
ํค์๋๋ฅผ ์ฌ์ฉํ๋ค.
type LoginButtonProps = {
text: string;
};
function LoginButton({ text }: LoginButtonProps){
const handleClick = () => {
console.log('click');
};
return (
<button onClick={handleClick}>
{text}
</button>
);
}
- ๊ฐ์ธ์ ์ผ๋ก
interface
ํค์๋ ๋ณด๋ค๋type
ํค์๋๋ฅผ ์ ํธํ๋ค. - [ํ์ ๋ณ์นญ๊ณผ ์ธํฐํ์ด์ค์ ์ฐจ์ด์ ](https://www.typescriptlang.org/ko/docs/handbook/2/everyday-types.html#%ED%83%80%EC%9E%85-%EB%B3%84%EC%B9%AD%EA%B3%BC-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90)
- ํ์
๋ณ์นญ์ ํ์
์ ํ์ฅํ ๋ ๊ต์งํฉ(
&
)์ ์ฌ์ฉํ์ง๋ง, ์ธํฐํ์ด์ค๋extends
ํค์๋๋ฅผ ํตํด ํ์ฅํ๋ค. - ์ธํฐํ์ด์ค๋ ๊ธฐ์กด์ ์ธํฐํ์ด์ค์ ์ ํ๋๋ฅผ ์ถ๊ฐํ ์ ์์ง๋ง, ํ์ ์ ์์ฑ๋ ๋ค์ ๋ฌ๋ผ์ง ์ ์๋ค.
- Test Code๋ ๊ผญ ์์ฑํ๋๋ก ํ์.
- ์ ๋ง ์์ฑํ๊ธฐ ์ด๋ ต๋ค๋ฉด,
ChatGPT
์ ํ์ ๋น๋ ค๋ณด์.(ChatGPT
๊ฐ ์๋ฒฝํ ํ ์คํธ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์ง๋ ์์ง๋ง, ์ผ์ด์ค๋ ์ด๋์ ๋ ์ ์ ๊ณตํ๋ ๊ฒ ๊ฐ์.) - ํ
์คํธ ์ฝ๋๋
jest-plugin-context
๋ฅผ ์ฌ์ฉํ์ฌ BDD ํ์์ผ๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์. (TDD๋ ์ด๋ ต๋ค๋ฉด ์ํด๋ ๋จ.) -
describe
ํค์๋๊ฐ ์ค๋ช ํ๊ธฐ ์ํ ๋ชฉ์ ์ด๋ผ๋ฉดcontext
๋ ๋ฌธ๋งฅ์ ํด๋นํ๋ ๊ฒ์ผ๋กjest
๊ฐ ๊ธฐ๋ณธ์ ์ผ๋กcontext
ํค์๋๋ฅผ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์jest-plugin-context
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. -
describe
๋ ํ ๊ธฐ๋ฅ์ ๋ํ ํ ์คํธ ์ธํธ๋ฅผ ๋ํํ๋๋ฐ ์ฌ์ฉ๋๊ณ ,context
๋ ๋์ผํ ์ํ์์ ํ๋์ ๊ธฐ๋ฅ์ ๋ํด ํ ์คํธ ์ธํธ๋ฅผ ๋ํํ๋๋ฐ ์ฌ์ฉ๋๋ค.
describe('Test Component', () => {
const renderComponent = () => render((
<Test />
));
context('๋ชจ๋ฐ์ผ์ธ ๊ฒฝ์ฐ', () => {
it('๋ฒํผ์ด ๋ณด์ฌ์ผ ํ๋ค', () => {
const { container } = renderComponent();
// ...
});
}
context('๋ชจ๋ฐ์ผ์ด ์๋ ๊ฒฝ์ฐ', () => {
it('๋ฒํผ์ ๋ณด์ด์ง ์์์ผ๋ง ํ๋ค', () => {
const { container } = renderComponent();
// ...
});
}
});
- ์ ํ ์คํธ ์ฝ๋๋ ์ปดํฌ๋ํธ์์ ๋ชจ๋ฐ์ผ์ธ ๊ฒฝ์ฐ ๋ฒํผ์ด ๋ณด์ฌ์ผ ํ๊ณ , ๋ชจ๋ฐ์ผ์ด ์๋ ๊ฒฝ์ฐ ๋ฒํผ์ด ๋ณด์ด์ง ์์์ผ๋ง ํ๋ ๋ฌธ๋งฅ์ผ๋ก ์ฝ์ ์ ์๋ค.
- ํ
์คํธ ์ฝ๋์ ๊ฐ๋
์ฑ ํฅ์์ ์ํด
given2
๋ ์ฌ์ฉํ๋ค. ์ข ๋ ์ ์ธ์ ์ด๊ฒ ์์ฑํ ์ ์๋ค.
describe('Some Component', () => {
const renderComponent = () => render((
<Test isMobile={given.isMobile} />
));
context('๋ชจ๋ฐ์ผ์ธ ๊ฒฝ์ฐ', () => {
given('isMobile', () => true);
it('๋ฒํผ์ด ๋ณด์ฌ์ผ ํ๋ค', () => {
const { container } = renderComponent();
// ...
});
}
context('๋ชจ๋ฐ์ผ์ด ์๋ ๊ฒฝ์ฐ', () => {
given('isMobile', () => false);
it('๋ฒํผ์ ๋ณด์ด์ง ์์์ผ๋ง ํ๋ค', () => {
const { container } = renderComponent();
// ...
});
}
});