Test Tip
ํ
์คํธ ์คํ ์์ปท
vscode >Keyboard Shorcuts > test.run > run test in current file or run test at cursor

VSCode Extension
ID: vitest.explorer
ID: kingwl.vscode-vitest-runner
ID: ms-playwright.playwright
์ฌ๋ฐ๋ฅธ ํ
์คํธ ์์ฑ๋ฒ
์ธํฐํ์ด์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ํ
์คํธ ์์ฑํ๊ธฐ
๋ด๋ถ ๊ตฌํ์ ๋ํ ํ ์คํธ ์ฝ๋๋ ๊ฐํ ์์กด์ฑ ๋๋ฌธ์ ๊นจ์ง๊ธฐ ์ฝ๊ณ ์ ์ง๋ณด์ ํ๊ธฐ ์ด๋ ต๋ค.
์ธํฐํ์ด์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์บก์ํ์ ์๋ฐ๋์ง ์์ผ๋ฉฐ ์ข ์์ฑ์ด ์๋ ํ ์คํธ๋ฅผ ์์ฑํ์
100% ์ปค๋ฒ๋ฆฌ์ง๋ณด๋ค๋ ์๋ฏธ ์๋ ํ
์คํธ์ธ์ง ๊ณ ๋ฏผ
์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ซ๋ค๋ณด๋ฉด ํฐ ์ ์ง ๋ณด์ ๋น์ฉ์ด ๋ฐ์ํ๋ฉฐ ์ ๋ฐ๋ก ๋ ๊ฒ์ฆ์ด ๋์๋ค๋ ์ฐฉ๊ฐ์ด ๋ค์ ์๋ค.
์๋ฏธ์๋ ํ ์คํธ๊ฐ ๋ฌด์์ธ์ง ๊ณ ๋ฏผํด๋ณด์
๊ฐ๋
์ฑ ์๋ ํ
์คํธ ์ฝ๋ ์์ฑ๋ฒ
1. ํ
์คํธ ํ๊ณ ์ ํ๋ ๋ด์ฉ์ ๋ช
ํํ ์์ฑํ๊ธฐ
ํ ์คํธ ๋์คํฌ๋ฆฝ์ ์ ์์ธํ ๋ช ํํ ์์ฑํ๋๊ฒ์ด ์ฑ์ ๋์์ ์ดํดํ๋๋ฐ ๋์๋๋ค.
// ๊ฒ์ฆ ๋์ - ๋ฆฌ์คํธ์์ ์ฒดํฌ๋ ํญ๋ชฉ๋ค ์ ์ธ
// BAD
it('๋ฆฌ์คํธ์์ ํญ๋ชฉ์ด ์ ๋ฐ๋ก ์ญ์ ๋๋ค.', () => {})
// GOOD
it('ํญ๋ชฉ๋ค์ ์ฒดํฌํ ํ ์ญ์ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ฆฌ์คํธ์์ ์ฒดํฌ๋ ํญ๋ชฉ๋ค์ด ์ญ์ ๋๋ค.', () => {})
2. ํ๋์ ํ
์คํธ์๋ ๊ฐ๊ธ์ ํ๋์ ๋์๋ง ๊ฒ์ฆํ์
ํ ์คํธ ์ฝ๋์์๋ ๊ฒ์ฆ ๋ฒ์์ ์ฑ ์์ ๋๋๋๊ฒ์ด ์ค์ํ๋ค.
๊ฐ๋จํ ํ ์คํธ๋ ์๊ด์์ง๋ง, ๋ค์ํ ์ปดํฌ๋ํธ๋ค์ด ์กฐํฉ๋์์ ๋ ์๋๋ฆฌ์ค๋ฅผ ๊ฒ์ฆํด์ผ ํ๋ค๋ฉด ํ๋์ ํ ์คํธ์์ ํ๋ฒ์ ๊ฒ์ฆํ๋๊ฒ์ด ์๋ ์ฌ๋ฌ ๊ฐ๋ก ๋๋์ด ๊ฒ์ฆํ๋ ๊ฒ์ด ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋๋ค.
๊ฒ์ฆ์ ํ์ํ ์ฝ๋๋ค์ด ๋ง์์ง๊ณ ๋์คํฌ๋ฆฝ์ ๋ ์ฅํฉํด์ง๋ค.
์ฌ๋ฌ ๊ฐ๋ฅผ ๊ฒ์ฆํ๋ค ๋ณด๋ ํน์ ๋ก์ง์ด ์์ ๋์ด๋ ํ ์คํธ ์์ฒด๊ฐ ๊นจ์ง๊ฒ ๋๋ค.
์ด๋ค ๋์์์ ํ ์คํธ๊ฐ ์คํจํ๋์ง ํ์ ํ๊ธฐ ์ด๋ ค์ธ ์ ์๋ค.
๊ฒ์ฆ์ ์ฑ ์์ด ๋ช ํํ ๋๋ ์ ธ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ํ ์คํธ ์ฝ๋๋ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๋ค.
// BAD
it('์ฅ๋ฐ๊ตฌ๋๋ฅผ ๋ด๊ธด ์ํ๋ค์ด ์ ์์ ์ผ๋ก ๋
ธ์ถ๋๊ณ , ์๋์ ๋ณ๊ฒฝํ๋ฉด ๊ฐ๊ฒฉ์ด ์ฌ๊ณ์ฐ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ญ์ ๋ฒํผ์ ๋๋ฅด๋ฉด ์ํ์ด ์ญ์ ๋๋ค.',
() => {}
)
// GOOD
it('์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ์ํ๋ค์ ์ ์์ ์ผ๋ก ๋ ๋๋ง ํ๋ค.', () => {})
it('์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ์ํ์ ์๋์ ์์ ํ๋ฉด ๊ฐ๊ฒฉ์ด ์ฌ๊ณ์ฐ ๋๋ค.', () => {})
it('์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ธด ํญ๋ชฉ์ ์ญ์ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ฆฌ์คํธ์์ ์ญ์ ๋๋ค', () => {})
์ข์ ํ
์คํธ ๊ตฌ์กฐ
ํ ์คํธ๋ ๋ ๋ฆฝ์ ์ธ ํ ์คํธ ์ผ์ด์ค๊ฐ ์๊ณ , ํ ์คํธ ์ ํ์ ์คํ๋๋ ๊ฒ๋ค(Before**, After**)์ด ์๋ค.
beforeAll(() => {})
beforeEach(() => {})
afterEach(() => {})
afterAll(() => {})
it('...', () => {
// Arrange, Given
const productService = new ProductService(new StubProductService());
// Act, When
const items = await productService.fetchAvailableItems();
// Assert, Then
expect(items.length)toBe(1);
expect(items).toEqual([{ item: 'A', available: true }])
})
์ค๋น (Arrange, Given)
ํ ์คํธ๋ฅผ ์ํ object๋ฅผ ์์ฑํ๊ณ ์ฌ๋ฌ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ์ค๋นํ๋ ๊ณผ์
์ค๋นํ๋ ๋จ๊ณ์์๋ ์ค๋น๊ณผ์ ์ ์ฌ๋ฌ๊ฐ์ ํ ์คํธ์ ๊ฑธ์ณ์ ๋ฐ๋ณตํด์ ์ฌ์ฉํ๋ค๋ฉด ์ฌ์ฌ์ฉํ ์ ์๋๋ก ์ ํธ๋ฆฌํฐ ํจ์๋ก ์ ์ํด์ ์ฌ์ฉ
์คํ (Act, When)
ํ ์คํธํ๊ณ ์ ํ๋ ์ฝ๋๋ฅผ ์คํ
์ฝ๋๋ฅผ ์คํํ์ ๋ ์๋์ ์ผ๋ก ์คํจํด๋ณด๊ธฐ
expect์ ๋ค๋ฅธ๊ฐ์ ๋ฃ๋๋ค๋ ์ง, ์คํจํ๋๋ก ๋ง๋ ๋ค์ ์คํจํ์ ๋ ์คํจํ์ง ์๊ธฐ ์ํด์ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์์ ํด์ผํ๋์ง ํ์ธํด๋ณด๊ธฐ
๋ฒ๊ทธ๋ฅผ ์์ ํ ๋ ์คํจํ๋ ํ ์คํธ๋ฅผ ๋จผ์ ๋ง๋ ํ, ๋ฒ๊ทธ๊ฐ ์ด๋ฐ ์ํฉ์์ ๋ฐ์ํ๊ตฌ๋๋ฅผ ๊ฒ์ฆํ ๋ค์์ ๋ฒ๊ทธ๋ฅผ ์์ ํด์ ์ด ํ ์คํธ ์ฝ๋๊ฐ ์ฑ๊ณตํ ์ ์๋๋ก ๋ง๋๋๊ฒ์ด ์ค์ํ๋ค.
์คํจํ์ง ์๋ ํ ์คํธ๋ ํ์ ์๋ค.
๋ชจ๋ ํ ์คํธ ์ฝ๋๋ ์๋์ ์ผ๋ก ์คํจํ ์ ์์ด์ผ ํ๋ค.
๊ฒ์ฆ (Assert, Then)
์คํํ ์ฝ๋๋ฅผ ์ฐ๋ฆฌ๊ฐ ์์ํ๊ฐ๊ณผ ๊ฐ์์ง ๊ฒ์ฆ
๋ด๊ฐ ํ๋์ ํ ์คํธ ํจ์ ์์์ ๊ฒ์ฌํ๋๊ฒ์ด ๋ง๋ค๋ฉด, ์ฌ๋ฌ๊ฐ์ ํ ์คํธ๋ก ๋ถ๋ฆฌํ ์ ์๋์ง ๊ณ ๋ฏผํด๋ณด์.
์ข์ ํ
์คํธ ์์น
First ์์น
Fast: ๋๋ฆฐ๊ฒ์ ๋ํ ์์กด์ฑ ๋ฎ์ถ๊ธฐ,
ํ ์คํธ๊ฐ ๋น ๋ฅด๊ฒ ์ํ๋์ด์ผ์ง ๋ช๊ฐ์ ํ ์คํธ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ผ๋ ๋น๋ฒํ ํ ์คํธ๋ฅผ ์ํํด์ ๋ฌธ์ ๊ฐ ์๋์ง ๊ฒ์ฆํ๋๊ฒ์ด ์ค์
Isolated: ์ต์ํ์ ์ ๋์ผ๋ก ๊ฒ์ฆํ๊ธฐ, ๋ ๋ฆฝ์ ์ด๊ณ ์ง์ค์ ์ผ๋ก ์ ์ง
ํ๋์ ํ ์คํธ์์ ๋๋ฌด ๋ง์๊ฒ์ ๋์์ ํ ์คํธํด์ ์ด๋์ ์ด๋ค๊ฒ์ด ์๋ชป๋์ด ํ ์คํธ๊ฐ ์คํจํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์์ฑํ์ง ๋ง๊ณ ์ต์ํ์ ๋จ์๋ก ์ด๋์ ์คํจํ๋์ง ํ๋์ ์ ์ ์๋๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์์ฑ
Repeatable: ๋ฐ๋ณต์ด ๊ฐ๋ฅํ๋๋ก ๋ง๋ค์ด๋ผ, ํ ์คํธ์ฝ๋๊ฐ ์คํ๋ ๋๋ง๋ค ๋์ผํ ๊ฒฐ๊ณผ ์ ์ง
์ธ์ , ๋ช๋ฒ ์คํํ๋์ ๋ฐ๋ผ์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ค๋ฉด ๋์ ํ ์คํธ ์ฝ๋
๋ค๋ฅธ ํ ์คํธ ์ฝ๋์ ์์กดํ๊ฑฐ๋, ์ธ๋ถ์ ํ๊ฒฝ(๋คํธ์ํฌ, ๋๋น)์ ์์กดํ๋ ํ ์คํธ๋ ๋ถ์์
ํ๊ฒฝ์ ์ํฅ์ ๋ฐ์ง ์๋๋ก.. ์์ฑ
Self-Validating: Assert library(expect, tobe ๋ฑ)์ ์ฌ์ฉํ๋ฉด ์ค์ค๋ก ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆ ๊ฐ๋ฅ
์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ํ ์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต
์๋ํ๋ฅผ ํตํ ๊ฒ์ฆ๋จ๊ณ ๋์ (CI/CD)
์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ ๊ธฐ์กด ํ ์คํธ ์ฝ๋์ ์ํฅ์ ์ฃผ๋์ง ํ์ธํ์ง ์์ผ๋ฉด ํ ์คํธ ์ฝ๋๋ ๋ถํ์
Timely: ์๊ธฐ์ ์ ํ๊ฒ ํ ์คํธ ์ฝ๋ ์์ฑ
์ฝ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ๋ฅ์ด ์์ ๋๊ณ ๋์ ์ฌ์ฉ์์๊ฒ ๋ฐฐํฌ๋ ํ ํ ์คํธ ์ฝ๋ ์์ฑํ๋๊ฑด ์๋ฏธ๊ฐ ์๋ค.
์ฝ๋ ์์ฑํ ๋, ๋ฆฌํฉํ ๋ง ์ , ์ฌ์ฉ์์๊ฒ ๋ฐฐํฌํ๊ธฐ ์ ์ ์๊ธฐ์ ์ ํ๊ฒ ํ ์คํธ ์ฝ๋ ์์ฑํด์ ์์ํ์ง ๋ชปํ ๋ฌธ์ ๋ฅผ ๋น ๋ฅด๊ฒ ์ก์๋ด๋๊ฒ์ด ์ค์
์ข์ ํ
์คํธ ๋ฒ์
Right-BICEP, ๋ชจ๋ ์๊ตฌ์ฌํญ์ด ์ ์ ๋์ํ๋์ง ํ์ธ
Boundary conditions: ๋ชจ๋ ์ฝ๋์ผ์ด์ค์ ๋ํด ํ ์คํธํ๊ธฐ
ex: ์๋ชป๋ ํฌ๋งท์ ์ธํ, null, ํน์๋ฌธ์, ์๋ชป๋ ์ด๋ฉ์ผ, ์์ ์ซ์, ์ค๋ณต, ์์๊ฐ ๋ง์ง ์๋ ๊ฒฝ์ฐ
Inverse relationship: ์ญ๊ด๊ณ๋ฅผ ์ ์ฉํด์ ๊ฒฐ๊ณผ๊ฐ์ ํ์ธ
์ผ๊ด์ฑ์ ์ ์ง (๋ง์ -> ๋บผ์ , ์ถ๊ฐ -> ์ ๊ฑฐ)
Cross-check: ๋ค๋ฅธ ์๋จ์ ์ด์ฉํด์ ๊ฒฐ๊ณผ๊ฐ์ด ๋ง๋์ง ํ์ธ
ex: ์ถ๊ฐ๋ ๊ณผ์ผ ๊ฐฏ์๋ฅผ ๊ตฌํ๋ ํจ์๋ฅผ ํ ์คํธ ํ๋ค๋ฉด, ๊ฒฐ๊ณผ๊ฐ์ด ๋ง๋์ง ํ์ธํ๊ธฐ ์ํด ์ ์ฒด ๊ณผ์ผ ๊ฐฏ์ - ์์ ๊ณผ์ผ ๊ฐฏ์ ๊ฐ๊ณผ ๋์ผํด์ผ ํ๋ค
ํน์ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ค๋ฉด ์ ํํ๊ฒ ๋์ํ๋์ง ํ์ธํ๊ธฐ ์ํด์ ๋์ผํ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด์ ์ฐ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ ๊ฒฐ๊ณผ๊ฐ์ด ๋๊ฐ์์ผ ํ๋ค.
Error conditions: ๋ถํํ ๊ฒฝ๋ก์ ๋ํด ์ฐ์ํ๊ฒ ์ฒ๋ฆฌ ํ๋๊ฐ?
๋คํธ์ํฌ ์๋ฌ, ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ง ๋ฑ
์์ํ ์ ์๋ ๋ชจ๋ ์๋ฌ ์ผ์ด์ค์ ๋ํด์ ํ ์คํธ๊ฐ ํต๊ณผํ๋์ง
Performance chracteristic: ์ฑ๋ฅ ํ์ธ์ ํ ์คํธ๋ฅผ ํตํด ์ ํํ ์์น๋ก ํ์ธ
์ฑ๋ฅ ๊ฐ์ ์ ์ฒ๋์ ํ์ธ๋ ๋ฐ์ดํฐ๋ฅผ ํตํด ํ์ธ
์ข์ ํ
์คํธ ์กฐ๊ฑด
ํ ์คํธ๋ ๊ฐ๊ฐ ์ํฉ ๋ฐ ์กฐ๊ฑด์ ๋ง๊ฒ ์ด๋ค ๊ฒฐ๊ณผ๊ฐ์ ์์ํ๋์ง๋ฅผ ํ ์คํธํ๋๊ฒ์ด ์ค์ -> CORRECT ์์น
๋จ์ํ ํ๋์ ์ฌ์ค์ ์๊ฑฐํด์ ํ ์คํธ๋ฅผ ์์ฑํ๋๊ฒ ์๋, ์ฌ๋ฌ๊ฐ์ง ์กฐ๊ฑด๋ค์ ํ ์คํธํด์ ํ ์คํธ ์ฝ๋๋ ๊ผผ๊ผผํ ์์ฑ
CORRECT
์์น์ ํ
์คํธ ์ฝ๋ ๋ฟ๋ง ์๋๋ผ ๋ฒ ์ด์ค ์ฝ๋๋ฅผ ์์ฑํ ๋๋ ์ ๋
Conformance: ํน์ ํฌ๋งท์ ์ค์
์ ํ๋ฒํธ, ์ด๋ฉ์ผ, ์์ด๋, ํ์ผ ํ์ฅ์ ๋ฑ
์ธํ์ด ํฌ๋งท์ ์ ํฉํ ๋, ์ ํฉํ์ง ์์ ๋, ์ฐ๋ฆฌ ์ฝ๋๊ฐ ์ด๋ค์์ผ๋ก ๋์ํ๋์ง ์์ํ๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑ
Ordering: ์์ ์กฐ๊ฑด ํ์ธํ๊ธฐ
์์๊ฐ ์ค์ํ ๊ฒฝ์ฐ
ํ ์คํธ ์ฝ๋๊ฐ ๋ฐฐ์ด์ ์์๋ฅผ ์ค์ํ๊ฒ ์๊ฐํ๋ ์ฝ๋๋ผ๋ฉด, ์์๊ฐ ์๋ชป๋์์ ๋ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ๋ฐ์ํ ๊ฒ์ธ์ง ์์ํ๋๊ฒ๋ค๋ ๋ชจ๋ ํ ์คํธ๋ก ๋ํ๋ด์ผํจ
Range: ์ซ์์ ๋ฒ์
์ ํ๋ ๋ฒ์๋ณด๋ค ํฌ๊ฑฐ๋ ์์ ๊ฒฝ์ฐ
Reference: ์ธ๋ถ ์์กด์ฑ ์ ๋ฌด, ํน์ ํ ์กฐ๊ฑด์ ์ ๋ฌด
~์ผ๋, ~๊ฐ ๋์์ ๋, ์ด๋ค ํน์ ํ ์ํฉ/์ํ ์ผ๊ฒฝ์ฐ ์ด๋ฐ ๋์์ ํ๋ค.
Existence: ๊ฐ์ด ์กด์ฌํ์ง ์์ ๋ ์ด๋ป๊ฒ ๋์?
null, undefined, 0, ''
Cardinality: 0-1-N ๋ฒ์น์ ๋ฐ๋ผ ๊ฒ์ฆ
ํ๋๋ ์์ ๋, ํ๋๋ง ์์ ๋, ์ฌ๋ฌ๊ฐ ์์ ๋
Time: ์๋, ์ ๋, ๋์์ ์ผ๋ค
์์๊ฐ ๋ง์ง ์์ ๊ฒฝ์ฐ, ์๋นํ ์๊ฐ, ์ง์ญ ์๊ฐ
์์๊ฐ ๋ง์ง ์์ ๋, ํน์ ์๊ฐ์ ์ง๋์น๊ฒ ์๋นํ์ ๋, ์๊ฐ์ ๊ฒ์ฌํ๋ค๋ฉด ์ง์ญ๋ง๋ค ๋๋ผ๋ง๋ค ์๊ฐ์ด ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ๊ฒ์ฌ
์ฌ๋ฌ๊ฐ์ง ์กฐ๊ฑด์ ๋ง๊ฒ ํ ์คํธ๋ฅผ ์์ฑํ๋ค ๋ณด๋ฉด ๋ฒ ์ด์ค ์ฝ๋์ ๋์น ๋ถ๋ถ์ ํ์ ํ๋ ์ํฉ์ด ์์ฃผ ์๊น!
๋ฌด์์ ์ค์ํ๊ฒ ์๊ฐํด์ผ ํ๋?
itteration speed vs Realistic envirionment
itteration speed: ํน์ ํ ์ผ์ ์์ํด์ ๋๋ ๋๊น์ง ๊ฑธ๋ฆฌ๋ ์๋
์ฆ, ๊ธฐ๋ฅ ๊ตฌํํ ํ ์คํธ ์ฝ๋ ์์ฑํ๊ณ ๊ฒ์ฆํ๋ ๋จ๊ณ๋ฅผ ํ๋ฐํด ๋์์ค๋ ์๋
์ฝ๋ ์์ ํ ๊ธฐ์กด ํ ์คํธ๋ฅผ ๋์ํด์ ๊ฒฐ๊ณผ ํ์ธํด์ ์์ฑํ๋ ํ๋ฐํด๋ฅผ
iteration
์ด๋ผ ํ๋ค.ํ ์คํธ ์์ฑํ๊ณ ํ ์คํธ ๋์ํ๋ ์๋๊ฐ ๋น ๋ฅด๋ฉด ๋น ๋ฅผ ์๋ก iteration speed๋ ๋น ๋ฅด๋ค๊ณ ๋ณผ ์ ์๋ค.
Realistic envirionment: ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ์ฑ์ ์ฌ์ฉํ์ ๋์ ํ๊ฒฝ๊ณผ ์ต๋ํ ๊ฐ๊น์ด๊ฒ
ํ
์คํธ์์ ์ ์ผ ํ์์ ์ธ ์กฐ๊ฑด์ผ๋ก "๋์ผํ ์ธํ์ด ์ฃผ์ด์ก์ ๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํด์ผํ๋ค" ์ธ๋ฐ ํ๊ฒฝ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ฉด ์ต์
์ ํ
์คํธ...๊ทธ๋์ E2E ํ
์คํธ๋ ์ค์ ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ๋์ํ๋๋ก ํด์ ์ข์ ํ
์คํธ์ด์ง๋ง itteration speed
๊ฐ ๋จ์ด์ง๊ณ ๊ฐํน ํ
์คํธ๊ฐ ์คํจํ๋ ๋ฌธ์ ์ ์ด ์๋ค.
How much to Mock
์ผ๋ง๋งํผ Mock์ ํ ๊ฒ์ธ๊ฐ
์ปดํฌ๋ํธ๋ฅผ ํ ์คํธํ๋ ๊ฒฝ์ฐ ์ ๋์ธ์ง ํตํฉ์ธ์ง ๊ฒฝ๊ณ๊ฐ ๋ถ๋ช ํํ๋ค.
์ด๋๊น์ง ์ ๋ํ ์คํธ๋ก ๋ถ๋ฅด๊ณ , ์ด๋๊น์ง ํตํฉ ํ ์คํธ๋ก ๋ถ๋ฅผ๊ฒ์ธ์ง๋ ์ฌ์ค ์ค์ํ์ง ์๋ค.
util, api, ๋จ์ผ ์ปดํฌ๋ํธ๋ ์ ๋ ํ ์คํธ, ๋ค๋ฅธ ์ปดํฌ๋ํธ ๋๋ ์ธ๋ถ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ํตํฉ ํ ์คํธ ใ ใ
React Testing Library
์กฐ๊ธ ๋ ํ ์คํธ๋ฅผ ๊ฐํธํ๊ฒ ๋ง๋ค์ด์ฃผ๊ณ , ํ ์คํธ ์์ฒด๋ง์ผ๋ก ์ ์ง๋ณด์์ฑ์ ๋ํ์ค
๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ๋ด๋ถ ๊ตฌํ์ฌํญ์ ์์กดํ์ง ์๊ณ ํ ์คํธ๋ฅผ ๊ฐํธํ๊ฒ ๋ง๋ค์ด์ค
๋ฆฌ์ํธ ์ปดํฌ๋ํธ๋ฅผ ํ ์คํธํ ๋ ๋ด๋ถ์ ์ผ๋ก ์ด๋ค CSS๋ฅผ ์ฌ์ฉํ๋์ง, ์ด๋ค ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ๊ตฌํ์ฌํญ์ ์์กดํ์ง ์๊ณ ํ๋ฉด์์, ์ฌ์ฉ์ ์ ์ฅ์์ 'ํน์ ํ ์คํธ๋ฅผ ๊ฐ๋ ๋ฒํผ์ ๊ฐ์ ธ์์ ํด๋ฆญํ๊ฑฐ๋, ํ ์คํธ๊ฐ ๋ณด์ด๋์ง ์๋ณด์ด๋์ง' ์กฐ๊ธ ๋ ์ธ๋ถ์ ์ธ ์ฌ์ฉ์ ๊ด์ ์์ ํ ์คํธ๋ฅผ ์์ฑํ ์ ์๋๋ก ๋์์ค
์ด๋ฐ ์ ๊ทผ๋ฒ์ ๋ฆฌํฉํ ๋ง์ ์ฝ๊ฒ ๋ง๋ค์ด์ฃผ๊ณ , ์น ์ ๊ทผ์ฑ๊ณผ ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ ์ข์ ์์น์ ๋ฐ๋ผ๊ฐ ์ ์๊ฒ ๋์์ค
๊ฒ์ฆํ๋ ค๋ ๊ธฐ๋ฅ๊ณผ ๊ด๊ณ์๋ ์ฝ๋๊ฐ ์์ ๋๋ ํ ์คํธ๊ฐ ์คํจํ๋ ์ํฉ์ ๋ง๋ค์ง ๋ง์
๋จ์ ์ผ๋ก RTL ์์ฒด๋ก๋ ์์ ๋ ธ๋๋ค์ ๊ฐ๋ณ๊ฒ ๋ ๋๋งํ๋๊ฑด ์ ๊ณตํ์ง ์์
์ปดํฌ๋ํธ ํ๋๋ง ํ ์คํธํ๋๋ผ๋ ๋ด๋ถ ์ปดํฌ๋ํธ๋ค์ ๋ชจ๋ ๋ ๋๋งํ๊ฒ๋จ
๋ด๋ถ ์ปดํฌ๋ํธ๋ค์ด ๊ฐ๋ ์์กด์ฑ๊น์ง ๋ชจ๋ ์ค์ ํด์ค์ผํด์ ๊น๋ค๋ก์
jest/vitest ์ mock ํ์ฉ
Last updated