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๋ฅผ ์์ฑํฉ๋๋ค. ์ค์ ๋ฐ์ดํฐ๊ฐ ์๊ฑฐ๋ ๊ฐ์์ ํ ์คํธ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋ ์ ์ฉํฉ๋๋ค.User ์ํฐํฐ๊ฐ ์ ํ์ ํฌํจ๋ ๊ฒฝ์ฐ์๋ง ์์ฑ ๋ฐฉ์ ์ ํ ํ๋กฌํํธ๊ฐ ํ์๋ฉ๋๋ค.
User ์ํฐํฐ๊ฐ ์์ผ๋ฉด ๋ฐ๋ก ์ ์ฅ ๋ฐฉ์ ์ ํ์ผ๋ก ๋์ด๊ฐ๋๋ค.
sign-up/email ์๋ํฌ์ธํธ๋ฅผ ํตํด ์ค์ ๋ก ๋ก๊ทธ์ธ ๊ฐ๋ฅํ ์ฌ์ฉ์๋ฅผ ์์ฑํฉ๋๋ค.
์ด ๋ชจ๋์ ๋์:
FixtureGenerator๋ก User ๋ฐ์ดํฐ(name, email, username ๋ฑ)๋ฅผ ์์ฑSonamu.auth.handler()๋ฅผ ํตํด better-auth sign-up API๋ฅผ ํธ์ถํ์ฌ ์ฌ์ฉ์ ๋ฑ๋ก- ์์ฑ๋ ๋ชจ๋ ์ฌ์ฉ์์
email_verified๋ฅผtrue๋ก ์๋ ์ ๋ฐ์ดํธ - ์์ฑ๋ ๊ณ์ ๋ชฉ๋ก(email, password)์ ์ฝ์์ ์ถ๋ ฅ
generateBatch()๋ก DB์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ better-auth ์ธ์ฆ ๋ ์ฝ๋๊ฐ ์์ฑ๋์ง ์์ผ๋ฏ๋ก ๋ก๊ทธ์ธ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
CLI ์ต์
:
์ ์ฅ ๋ฐฉ์:
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์ ์ ์ธํฉ๋๋ค:
better-auth๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ์กด ํ๋ก์ ํธ์
fixtureCompanions๋ฅผ ์๊ธ ์ ์ฉํ๋ ค๋ฉด:
entity.json์ fixtureCompanions ์ค์ ์ด ์๋ ๊ฒฝ์ฐ์๋ง ์๋์ผ๋ก ์ถ๊ฐํฉ๋๋ค. ์ด๋ฏธ ์ค์ ์ด ์๋ Entity๋ ๊ฑด๋๋๋๋ค.
parentId ์ํฐํฐ Fixture ์์ฑ:
parentId๊ฐ ์ง์ ๋ ์ํฐํฐ(์์ ๊ด๊ณ์ ์๋ธํ์
)๋ gen ์ ํน๋ณํ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค. ์๋ก์ด ๋ถ๋ชจ ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋์ , DB์์ ์์ง ์๋ธํ์
ํ์ด ์๋ ๊ธฐ์กด ๋ถ๋ชจ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ํด๋น ID๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด Paper๊ฐ Achievement์ ์๋ธํ์
(parentId: "Achievement")์ธ ๊ฒฝ์ฐ:
achievementsํ ์ด๋ธ์์ ์์งpapersํ ์ด๋ธ์ ๋์ํ๋ ํ์ด ์๋ ID๋ฅผ ์กฐํ- ํด๋น ID๋ก
Paperfixture๋ฅผ ์์ฑํ์ฌ ๋ถ๋ชจ-์์ ๊ด๊ณ๋ฅผ ํ์ฑ
id prop์ cone์ fixtureParentOverrides๋ฅผ ์ง์ ํฉ๋๋ค:
fetch - ์ด์ DB์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
์ค์ ์ด์ DB(๋๋ ๊ฐ๋ฐ DB)์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ Fixture DB์ ์ ์ฅํฉ๋๋ค. ํ์ค์ ์ธ ํ ์คํธ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋ ์ฌ์ฉํฉ๋๋ค.
๋ฐ์ดํฐ ์ ํ ์ ๋ต:
recent(๊ธฐ๋ณธ๊ฐ): ์ต๊ทผ ๋ฐ์ดํฐ๋ถํฐ ๊ฐ์ ธ์ดsample: ๋ฌด์์ ์ํ๋ง
- ๊ด๊ณ๋ ๋ฐ์ดํฐ๋ ํจ๊ป ์๋์ผ๋ก ๊ฐ์ ธ์ด (๊น์ด 2 ๋ ๋ฒจ๊น์ง)
- ์ธ๋ํค ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์ ์ง
explore - DB ๋ฐ์ดํฐ ์กฐํ
DB์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ๋ง ํฉ๋๋ค. ์ ์ฅํ์ง ์๊ณ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ๋ ์ ์ฉํฉ๋๋ค.
๋ฐ์ดํฐ ์ ํ ์ ๋ต:
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์ ์ ๊ทผ ๋ถ๊ฐ.env.test
๊ด๊ณ ๋ฐ์ดํฐ ๋๋ฝ
๋ฌธ์ : ์ธ๋ํค ์๋ฌ ๋ฐ์Fixture ์ถฉ๋
๋ฌธ์ : ID ์ค๋ณต๋ฒ ์คํธ ํ๋ํฐ์ค
1. ์ต์ํ์ ๋ฐ์ดํฐ
2. ์๋ฏธ์๋ ๋ฐ์ดํฐ
3. ๋ฒ์ ๊ด๋ฆฌ
4. CI/CD ํตํฉ
.github/workflows/test.yml
๋ค์ ๋จ๊ณ
Testing
Naite ํ
์คํธ ํ๋ ์์ํฌ ์์๋ณด๊ธฐ
migrate
๋ง์ด๊ทธ๋ ์ด์
๊ด๋ฆฌํ๊ธฐ