pnpm fixture ๋ช
๋ น์ด๋ ํ
์คํธ์ ์ฌ์ฉํ ์ผ๊ด๋ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ๊ฐ๋ฐ ํ๊ฒฝ์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ํ
์คํธ ํ๊ฒฝ์ผ๋ก ๋ณต์ฌํ์ฌ, ์์ ์ ์ด๊ณ ๋ฐ๋ณต ๊ฐ๋ฅํ ํ
์คํธ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ๊ฐ๋
Fixture๋ ํ ์คํธ์ฉ ๊ณ ์ ๋ ๋ฐ์ดํฐ ์ธํธ์ ๋๋ค:- ์ผ๊ด์ฑ: ๋ชจ๋ ํ ์คํธ๊ฐ ๊ฐ์ ์ด๊ธฐ ๋ฐ์ดํฐ๋ก ์์
- ๊ฒฉ๋ฆฌ: ํ ์คํธ DB์ ๊ฐ๋ฐ DB ๋ถ๋ฆฌ
- ์ฌํ์ฑ: ๊ฐ์ ์กฐ๊ฑด์์ ๋ฐ๋ณต ํ ์คํธ ๊ฐ๋ฅ
- ๊ด๊ณ ๋ณด์กด: ์ธ๋ํค ๊ด๊ณ๊ฐ ์ ์ง๋จ
๋ช ๋ น์ด
init - ํ ์คํธ DB ์ด๊ธฐํ
๊ฐ๋ฐ DB์ ์คํค๋ง๋ฅผ ํ ์คํธ DB๋ก ๋ณต์ฌํฉ๋๋ค.- Fixture DB (์๊ฒฉ): ๊ณต์ fixture ์ ์ฅ์
- Test DB (๋ก์ปฌ): ๋ก์ปฌ ํ ์คํธ์ฉ DB
init์ ์คํค๋ง๋ง ๋ณต์ฌํฉ๋๋ค. ๋ฐ์ดํฐ๋ ํฌํจ๋์ง ์์ต๋๋ค.import - ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
๊ฐ๋ฐ DB์์ ํน์ ๋ ์ฝ๋๋ฅผ fixture๋ก ์ ์ฅํฉ๋๋ค.- ์ธ๋ํค๋ก ์ฐธ์กฐ๋๋ ๋ ์ฝ๋
- ๊ด๊ณ ํ ์ด๋ธ์ ๋ ์ฝ๋
- ์ญ์ฐธ์กฐ ๋ ์ฝ๋ (์ ํ ๊ฐ๋ฅ)
sync - ๋๊ธฐํ
์ ์ฅ๋ fixture๋ฅผ ํ ์คํธ DB์ ์ ์ฉํฉ๋๋ค.gen - ์๋ Fixture ์์ฑ
Entity์ cone ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์๋์ผ๋ก Fixture๋ฅผ ์์ฑํฉ๋๋ค. ์ค์ ๋ฐ์ดํฐ๊ฐ ์๊ฑฐ๋ ๊ฐ์์ ํ ์คํธ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋ ์ ์ฉํฉ๋๋ค.| ์ต์ | ์ค๋ช | ์์ |
|---|---|---|
--all | ๋ชจ๋ Entity์ ๋ํด ์์ฑ | pnpm fixture gen --all |
--include | ํน์ Entity๋ง ํฌํจ | pnpm fixture gen --include User,Post |
--exclude | ํน์ Entity ์ ์ธ (โall๊ณผ ํจ๊ป ์ฌ์ฉ) | pnpm fixture gen --all --exclude Comment |
--count | ์์ฑํ ๋ ์ฝ๋ ์ | pnpm fixture gen --include User --count 10 |
--save-to | ์ ์ฅ ๋ฐฉ์ ์ง์ | pnpm fixture gen --save-to db |
--use-llm | LLM์ผ๋ก ํ์ค์ ์ธ ๋ฐ์ดํฐ ์์ฑ (fixtureHint ๊ธฐ๋ฐ, ANTHROPIC_API_KEY ํ์) | pnpm fixture gen --use-llm |
--no-cache | LLM ์บ์ ๋นํ์ฑํ (--use-llm๊ณผ ํจ๊ป ์ฌ์ฉ) | pnpm fixture gen --use-llm --no-cache |
db: Fixture DB์ ์ง์ ์ ์ฅ (๊ธฐ๋ณธ๊ฐ)file:test/fixtures/{entity_table}.jsonํ์ผ๋ก ์ ์ฅfile:{filename}: ์ง์ ๋ ํ์ผ๋ช ์ผ๋ก ์ ์ฅnone: ์ ์ฅํ์ง ์๊ณ ์ฝ์์ ์ถ๋ ฅ๋ง
- Relation โ ์ธ๋ํค ๊ด๊ณ๊ฐ ์๋ ํ๋๋ ์๋์ผ๋ก ๊ด๋ จ ๋ ์ฝ๋๋ฅผ ์์ฑ/์ฐธ์กฐํฉ๋๋ค.
- cone.note + LLM โ
--use-llm์ต์ ์ด ์ผ์ ธ ์๊ณ , ํด๋น ํ๋์ cone์note๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ LLM์ดnote๋ด์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ค์ ์ธ ๊ฐ์ ์์ฑํฉ๋๋ค. LLM ํธ์ถ์ด ์คํจํ๋ฉด ๋ค์ ๋จ๊ณ๋ก ํด๋ฐฑํฉ๋๋ค. - cone.fixtureGenerator โ cone์
fixtureGenerator(Faker ํํ์ ๋ฑ)๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์คํํฉ๋๋ค. - cone.fixtureDefault โ cone์
fixtureDefault๊ณ ์ ๊ฐ์ด ์ง์ ๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. - ํ์ ๋ณ ๊ธฐ๋ณธ ์์ฑ โ ์ ์ด๋ค ์ ๋ต๋ ํด๋นํ์ง ์์ผ๋ฉด ํ๋ ํ์ (string, number, date ๋ฑ)์ ๋ฐ๋ผ ์๋ ์์ฑํฉ๋๋ค.
--use-llm ์ฌ์ฉ ์ cone.note๊ฐ ์๋ ํ๋๋ fixtureGenerator๋ณด๋ค LLM์ด ์ฐ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด
๋๋ฉ์ธ์ ๋ง๋ ๋ ํ์ค์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.LLM์ด ์์ฑํ ๋ฌธ์์ด์ด ํด๋น ํ๋์
length ์ ์ฝ์ ์ด๊ณผํ๋ฉด ์๋์ผ๋ก ์๋ผ๋
๋๋ค. ์๋ฅผ ๋ค์ด
varchar(100) ํ๋์ ๋ํด LLM์ด 120์๋ฅผ ์์ฑํ๋ฉด ์ 100์๋ง ์ฌ์ฉ๋ฉ๋๋ค.fixtureCompanions๊ฐ ์ ์ธ๋์ด ์์ผ๋ฉด, ๋ถ๋ชจ fixture ์์ฑ ์ companion Entity์ fixture๋ ํจ๊ป ์๋ ์์ฑ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด better-auth ๊ธฐ๋ฐ ํ๋ก์ ํธ์์ User fixture๋ฅผ ์์ฑํ๋ฉด credentials Account๋ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
fixtureCompanions๋ Entity์ id prop cone์ ์ ์ธํฉ๋๋ค:
| ์์ฑ | ์ค๋ช |
|---|---|
entity | ํจ๊ป ์์ฑํ companion Entity ์ด๋ฆ |
overrides | companion fixture์ ์ ์ฉํ ๊ณ ์ ์ค๋ฒ๋ผ์ด๋ ๊ฐ. {{fieldName}} ํ์์ผ๋ก ๋ถ๋ชจ fixture์ ํ๋ ๊ฐ์ ์ฐธ์กฐํ ์ ์์ต๋๋ค |
count | ๋ถ๋ชจ 1๊ฐ๋น ์์ฑํ companion ๊ฐ์ (๊ธฐ๋ณธ๊ฐ: 1) |
fixtureCompanions๋ฅผ ์๊ธ ์ ์ฉํ๋ ค๋ฉด:
entity.json์ fixtureCompanions ์ค์ ์ด ์๋ ๊ฒฝ์ฐ์๋ง ์๋์ผ๋ก ์ถ๊ฐํฉ๋๋ค. ์ด๋ฏธ ์ค์ ์ด ์๋ Entity๋ ๊ฑด๋๋๋๋ค.
parentId ์ํฐํฐ Fixture ์์ฑ:
parentId๊ฐ ์ง์ ๋ ์ํฐํฐ(์์ ๊ด๊ณ์ ์๋ธํ์
)๋ gen ์ ํน๋ณํ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ์๋ก์ด ๋ถ๋ชจ ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋์ , DB์์ ์์ง ์๋ธํ์
ํ์ด ์๋ ๊ธฐ์กด ๋ถ๋ชจ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ํด๋น ID๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด Paper๊ฐ Achievement์ ์๋ธํ์
(parentId: "Achievement")์ธ ๊ฒฝ์ฐ:
achievementsํ ์ด๋ธ์์ ์์งpapersํ ์ด๋ธ์ ๋์ํ๋ ํ์ด ์๋ ID๋ฅผ ์กฐํ- ํด๋น ID๋ก
Paperfixture๋ฅผ ์์ฑํ์ฌ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ํ์ฑ
id prop์ cone์ fixtureParentOverrides๋ฅผ ์ง์ ํฉ๋๋ค:
| ์์ฑ | ์ค๋ช |
|---|---|
fixtureParentOverrides | ๋ถ๋ชจ ํ ์ด๋ธ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ ์ฝ๋๋ฅผ ์กฐํํ ๋ ์ ์ฉํ WHERE ์กฐ๊ฑด. ์๋ฅผ ๋ค์ด ์๋ธํ์ ๋ณ๋ก ๊ตฌ๋ถ ์ปฌ๋ผ์ด ์๋ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ผ๋ก ํํฐ๋งํฉ๋๋ค |
fetch - ์ด์ DB์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
์ค์ ์ด์ DB(๋๋ ๊ฐ๋ฐ DB)์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ Fixture DB์ ์ ์ฅํฉ๋๋ค. ํ์ค์ ์ธ ํ ์คํธ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋ ์ฌ์ฉํฉ๋๋ค.| ์ต์ | ์ค๋ช | ์์ |
|---|---|---|
--all | ๋ชจ๋ Entity์์ ๊ฐ์ ธ์ค๊ธฐ | pnpm fixture fetch --all |
--include | ํน์ Entity๋ง ํฌํจ | pnpm fixture fetch --include User,Post |
--exclude | ํน์ Entity ์ ์ธ | pnpm fixture fetch --all --exclude Log |
--strategy | ๋ฐ์ดํฐ ์ ํ ์ ๋ต | pnpm fixture fetch --strategy recent |
--limit | ๊ฐ์ ธ์ฌ ๋ ์ฝ๋ ์ | pnpm fixture fetch --limit 20 |
recent(๊ธฐ๋ณธ๊ฐ): ์ต๊ทผ ๋ฐ์ดํฐ๋ถํฐ ๊ฐ์ ธ์ดsample: ๋ฌด์์ ์ํ๋ง
- ๊ด๊ณ๋ ๋ฐ์ดํฐ๋ ํจ๊ป ์๋์ผ๋ก ๊ฐ์ ธ์ด (๊น์ด 2 ๋ ๋ฒจ๊น์ง)
- ์ธ๋ํค ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์ ์ง
explore - DB ๋ฐ์ดํฐ ์กฐํ
DB์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ๋ง ํฉ๋๋ค. ์ ์ฅํ์ง ์๊ณ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ๋ ์ ์ฉํฉ๋๋ค.| ์ต์ | ์ค๋ช | ์์ |
|---|---|---|
--include | ํ์ํ Entity | pnpm fixture explore --include User |
--strategy | ๋ฐ์ดํฐ ์ ํ ์ ๋ต | pnpm fixture explore --strategy sample |
--limit | ์กฐํํ ๋ ์ฝ๋ ์ | pnpm fixture explore --limit 5 |
sample(๊ธฐ๋ณธ๊ฐ): ๋ฌด์์ ์ํrecent: ์ต๊ทผ ๋ฐ์ดํฐrandom: ์์ ๋ฌด์์ids: ํน์ ID ์ง์ query: ์ปค์คํ ์ฟผ๋ฆฌ
์ฌ์ฉ ์ํฌํ๋ก์ฐ
1. ์ด๊ธฐ ์ค์
ํ๋ก์ ํธ ์์ ์ ํ ๋ฒ๋ง ์คํํฉ๋๋ค.2. ํ์ํ ๋ฐ์ดํฐ ์ ํ
ํ ์คํธ์ ํ์ํ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.3. ํ ์คํธ ์์ฑ
user.model.test.ts
4. ํ ์คํธ ์คํ
Fixture ํ์ผ
์ ์ฅ ์์น
ํ์ผ ํ์
src/fixtures/users.json
- JSON ํ์
- Entity๋ณ๋ก ํ์ผ ๋ถ๋ฆฌ
- ๊ด๊ณ ๋ฐ์ดํฐ ์๋ ํฌํจ
- Git์ผ๋ก ๋ฒ์ ๊ด๋ฆฌ
๊ด๊ณ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
์ธ๋ํค ์๋ ํฌํจ
Post๋ฅผ importํ๋ฉด ์ฐ๊ฒฐ๋ User๋ ์๋์ผ๋ก ํฌํจ๋ฉ๋๋ค.N:M ๊ด๊ณ ์ฒ๋ฆฌ
๋ค๋๋ค ๊ด๊ณ ํ ์ด๋ธ๋ ์๋์ผ๋ก ํฌํจ๋ฉ๋๋ค.ํ ์คํธ ๊ฒฉ๋ฆฌ
๊ฐ ํ ์คํธ๋ง๋ค ์ด๊ธฐํ
- ๊ฐ ํ ์คํธ๊ฐ ๋ ๋ฆฝ์
- ํ ์คํธ ์์ ๋ฌด๊ด
- ๋ณ๋ ฌ ์คํ ๊ฐ๋ฅ
ํธ๋์ญ์ ๊ฒฉ๋ฆฌ
์ค์ ์์
๋ณต์กํ ๊ด๊ณ ํ ์คํธ
ํน์ ์๋๋ฆฌ์ค ๋ฐ์ดํฐ
๋ฌธ์ ํด๊ฒฐ
Fixture DB ์ฐ๊ฒฐ ์คํจ
๋ฌธ์ : ์๊ฒฉ fixture DB์ ์ ๊ทผ ๋ถ๊ฐsonamu.config.ts
๊ด๊ณ ๋ฐ์ดํฐ ๋๋ฝ
๋ฌธ์ : ์ธ๋ํค ์๋ฌ ๋ฐ์Fixture ์ถฉ๋
๋ฌธ์ : ID ์ค๋ณต๋ฒ ์คํธ ํ๋ํฐ์ค
1. ์ต์ํ์ ๋ฐ์ดํฐ
2. ์๋ฏธ์๋ ๋ฐ์ดํฐ
3. ๋ฒ์ ๊ด๋ฆฌ
4. CI/CD ํตํฉ
.github/workflows/test.yml
๋ค์ ๋จ๊ณ
Testing
Naite ํ
์คํธ ํ๋ ์์ํฌ ์์๋ณด๊ธฐ
migrate
๋ง์ด๊ทธ๋ ์ด์
๊ด๋ฆฌํ๊ธฐ