๐งช ๋จ์ ํ
์คํธ ๋ฐ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ์์ ์ ๋ณต

์ ํ๋ฆฌ์ผ์ด์
์ ํ์ง์ ๋์ด๊ธฐ ์ํด ๊ผญ ํ์ํ ๊ฒ์ด ํ
์คํธ ์๋ํ์ด๋ค.
์ค๋์ ๋จ์ ํ
์คํธ(Unit Test)์ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง(Code Coverage)์ ๋ํด ์ ๋ฆฌํ๋ค.
โ
๋จ์ ํ
์คํธ๋?
์ฝ๋์ ๊ฐ์ฅ ์์ ๋จ์(ํจ์, ๋ชจ๋ ๋ฑ)๊ฐ ๊ธฐ๋ํ ๋๋ก ๋์ํ๋์ง๋ฅผ ๊ฒ์ฆํ๋ ํ
์คํธ
๐น ์ ๋จ์ ํ
์คํธ๊ฐ ์ค์ํ๊ฐ?
- ๊ธฐ๋ฅ ์์ ์ ๋ถ์์ฉ(๋ฒ๊ทธ)์ ๋น ๋ฅด๊ฒ ๊ฐ์ง ๊ฐ๋ฅ
- ์ฝ๋์ ์ ๋ขฐ๋ ์์น โ ๋ฆฌํฉํ ๋ง ์ ์์ ์ฅ์น ์ญํ
- ๋ฌธ์ํ ํจ๊ณผ: ํ
์คํธ ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ฌ์ฉ๋ฒ์ด ๋๋ฌ๋จ
๐น ์์ (Jest ๊ธฐ์ค)
export const sum = (a: number, b: number) => a + b;
import { sum } from './sum';
test('1 + 2๋ 3์ด๋ค', () => {
expect(sum(1, 2)).toBe(3);
});
๐ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋?
์์ฑํ ํ
์คํธ๊ฐ ์ค์ ์ฝ๋์ ๋ช %๋ฅผ ์คํํ๋์ง ์ธก์ ํ๋ ์งํ
๐น ์ฃผ์ ์งํ
| ์งํ | ์ค๋ช
|
|---|
| Statements | ์ ์ฒด ์ฝ๋ ์ค ์คํ๋ ๊ตฌ๋ฌธ ๋น์จ |
| Branches | if/else, switch ๋ฑ ์กฐ๊ฑด ๋ถ๊ธฐ ์คํ ๋น์จ |
| Functions | ํธ์ถ๋ ํจ์ ๋น์จ |
| Lines | ์ค์ ์คํ๋ ์ฝ๋ ๋ผ์ธ ์ ๋น์จ |
๐น ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ
- Jest:
--coverage ํ๋๊ทธ๋ก ์์ฝ๊ฒ ํ์ธ ๊ฐ๋ฅ
- nyc (Istanbul): ๋ค์ํ ํ๊ฒฝ์์ ์ฌ์ฉ๋๋ ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ
๐ง ์ปค๋ฒ๋ฆฌ์ง ์คํ ์์ (Jest)
npm test -- --coverage
์ถ๋ ฅ ๊ฒฐ๊ณผ:
Statements : 90% (45/50)
Branches : 85% (17/20)
Functions : 100% (10/10)
Lines : 90% (45/50)
๐ฏ ํ
์คํธ ์ ๋ต ํ
- ํ
์คํธ ์ฝ๋๋ ์ ์ง๋ณด์ ๋์์ด๋ผ๋ ์ ์ ๊ธฐ์ตํ์
- ํ
์คํธ๋ ์
๋ ฅ๊ณผ ์ถ๋ ฅ ์ค์ฌ์ผ๋ก, ๋ด๋ถ ๋ก์ง์ ๊ณผํ๊ฒ ์์กดํ์ง ์๊ธฐ
- ๋ณต์กํ ํจ์๋ edge case๋ ํจ๊ป ํ
์คํธ
- CI ๋๊ตฌ(GitHub Actions ๋ฑ)์ ์ฐ๋ํ์ฌ PR ์ ์๋ ์คํ๋๋๋ก ๊ตฌ์ฑ
๐ง TIL
- ๋จ์ ํ
์คํธ๋ ๋น ๋ฅด๊ณ ๋ช
ํํด์ผ ํ๋ค โ ๋๋ฆฌ๋ฉด ํตํฉ ํ
์คํธ๋ก ๋ถ๋ฆฌ
- ์ปค๋ฒ๋ฆฌ์ง๋ ๋์์๋ก ์ข์ง๋ง, 100%๊ฐ ๋ชฉํ๋ ์๋ (ํ์ง๋ณด๋ค ์์น ์ง์ฐฉ์ ๊ธ๋ฌผ)
- ํ
์คํธ๋ฅผ ์์ฑํ๋ ์ต๊ด์ด ์ฝ๋์ ํ์ง์ ์ข์ฐํ๋ค!