Π ΡΡΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ command line ΡΡΠΈΠ»ΠΈΡΠ° Π΄Π»Ρ Π²ΡΠ³ΡΡΠ·ΠΊΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΡ , Ρ ΡΠ°Π½ΡΡΠ΅ΠΉΡΡ Π² ΡΠ°ΠΉΠ»Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π²ΠΎ Π²Π½Π΅ΡΠ½ΡΡ Π±Π°Π·Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ. ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π² yml ΡΠ°ΠΉΠ»Π°Ρ Π² ΡΠΎΡΠΌΠ°ΡΠ΅, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅.
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅Ρ @spec-box/sync ΠΈΠ· Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ npm
npm i @spec-box/sync --registry=https://registry.npmjs.org -D
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ»
.tms.json
:{ "api": { "host": "http://localhost:5059", "project": "id" }, "yml": { "files": [ "tests/unit/**/*.unit.testpalm.yml" ] } }
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ
npx spec-box validate
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Π²ΡΠ³ΡΡΠ·ΠΊΡ
ΠΠ΅ΡΠ΅Π΄Π°Π² ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
npx spec-box sync
--message
, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½Π° Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π²ΡΠ³ΡΡΠ·ΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π²Π΅ΡΠΊΠΈ VCS.npx spec-box sync --message="my commit message"
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Π²ΡΠ³ΡΡΠ·ΠΊΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ΅ΡΡΠΎΠ² ΠΈΠ· ΠΎΡΡΠ΅ΡΠ° Jest (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
Π Π±Π°Π·Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³ΡΡΠΆΠ΅Π½Ρ: Π΄Π°ΡΠ° ΠΈ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ², ΡΡΠΌΠΌΠ°ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΡΠΎΠ², ΡΡΠΌΠΌΠ°ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅)
npx spec-box upload-stat
ΠΠ°ΠΆΠ΄ΡΠΉ yml ΡΠ°ΠΉΠ» ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΠΈ (ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°) ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ»Ρ ΡΠΈΡΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ: ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ (ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΠ»Π°ΡΡΡΡ Π½Π° Π½Π΅Π΅), Π½Π°Π·Π²Π°Π½ΠΈΠ΅, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΌΠ΅ΡΠ°-ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (Π°ΡΡΠΈΠ±ΡΡΡ) ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΡ Π² Π³ΡΡΠΏΠΏΡ.
ΠΡΠΈΠΌΠ΅Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π€Π’ Π² yml ΡΠ°ΠΉΠ»Π΅:
feature: ΠΠ»Π°Π²Π½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° # ΠΏΠΎΠ½ΡΡΠ½ΠΎΠ΅ Π΄Π»Ρ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠΈΡΠΈ
description: ΠΡΠΈΠΌΠ΅Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ # ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΡΠΈ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
code: home-page # ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ (Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΠΏΡΠΎΠ΅ΠΊΡΠ°) ΠΊΠΎΠ΄ ΡΠΈΡΠΈ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° Π½Π΅ ΡΡΡΠ»Π°ΡΡΡΡ
type: Functional # ΡΠΈΠΏ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Functional ΠΈ Visual)
# ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ
ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ (ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ΅), ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΡ
Π² Π³ΡΡΠΏΠΏΡ
specs-unit:
ΠΡΠΎΠΌΠΎ-Π±Π»ΠΎΠΊ:
- assert: ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ "ΠΊΠ°ΡΡΡΠ΅Π»Ρ" ΡΠΎ ΡΠ»Π°ΠΉΠ΄Π°ΠΌΠΈ
description: ΠΡΠΈΠΌΠ΅Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ # (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ)
- assert: ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π°ΠΉΠ΄Π° ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΈ ΡΠΎΡΠΎ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ
ΠΏΡΠΈΡΠ»ΠΈ Ρ Π±ΡΠΊΠ΅Π½Π΄Π°
ΠΠ»ΠΎΠΊ ΠΊΠΎΡΠ·ΠΈΠ½Ρ:
- assert: ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈ ΠΎΠ±ΡΠ°Ρ ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΡΠΎΠ²Π°ΡΠΎΠ² Π² ΠΊΠΎΡΠ·ΠΈΠ½Π΅
- assert: ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ° "ΠΡΠΎΡΠΌΠΈΡΡ Π·Π°ΠΊΠ°Π·", ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΡ Π·Π°ΠΊΠ°Π·Π°
ΠΠΎΠ»Π΅ code
Ρ ΡΠΈΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ. ΠΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΠ»Π°ΡΡΡΡ Π½Π° ΡΠΈΡΡ.
ΠΠ°ΠΆΠ½ΠΎ: Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ code
ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠ΅ Π±ΡΠΊΠ²Ρ, ΡΠΈΡΡΡ, Π·Π½Π°ΠΊΠΈ -
(Π΄Π΅ΡΠΈΡ) ΠΈ _
(ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΠ΅) ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ Π±ΡΠΊΠ²Ρ.
Π Π½Π°Π·Π²Π°Π½ΠΈΡΡ
ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΡ
ΡΠΈΡΠ΅ΠΉ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ
ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ (ΠΏΠΎΠ»Ρ feature
, assert
ΠΈ description
) Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠ΄ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΡΠΈ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² Π½Π°ΡΠ°Π»ΠΎ Π·Π½Π°ΠΊ $
. ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ
(ΠΊΠΎΠΌΠ°Π½Π΄Π° validate
) Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΡΠ°ΠΊΠΈΡ
ΡΡΡΠ»ΠΎΠΊ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
feature: Π‘ΡΡΠ°Π½ΠΈΡΠ° ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΡ Π·Π°ΠΊΠ°Π·Π°
code: checkout-page
# Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΡΡΠ»ΠΊΠ° Π½Π° Π΄ΡΡΠ³ΡΡ ΡΠΈΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ 'product-card'
description: ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π½Π° ΡΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΠΊΠ°ΡΡΠΎΡΠΊΠΈ ΡΠΎΠ²Π°ΡΠ° $product-card
specs-unit:
ΠΡΠ±ΠΎΡ Π°Π΄ΡΠ΅ΡΠ° Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ:
# Π² ΡΠ΅ΠΊΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠ»ΠΊΠ° Π½Π° Π΄ΡΡΠ³ΡΡ ΡΠΈΡΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ 'address-dialog'
- assert: ΠΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ "ΠΡΠ±ΡΠ°ΡΡ Π°Π΄ΡΠ΅Ρ" ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ Π΄ΠΈΠ°Π»ΠΎΠ³ Π²ΡΠ±ΠΎΡΠ° Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΠΊΠ°ΡΡΠ΅ $address-dialog
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠΎΡΠΌΠ°Ρ ΠΏΠΎΠ»Ρ
code
Π΄Π»Ρ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΌΠ΅ΡΠ°-ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ β ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΠΎΡΠΌΠ°Ρ ΠΏΠΎΠ»Ρcode
Π΄Π»Ρ ΡΠΈΡΠ΅ΠΉ
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ Π² ΠΊΠΎΡΠ½Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ°ΠΉΠ» .spec-box-meta.yml
ΠΈ ΠΎΠΏΠΈΡΠ°ΡΡ Π² Π½Π΅ΠΌ ΠΌΠ΅ΡΠ°-ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π»Ρ ΡΠΈΡΠ΅ΠΉ: Π°ΡΡΠ±ΡΡΡ ΠΈ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π² Π²ΠΈΠ΄Π΅ Π΄Π΅ΡΠ΅Π²Π°.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Ρ ΡΠ°Π½ΠΈΡΡ ΠΌΠ΅ΡΠ°-ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΡΠ°ΠΉΠ»Π΅ Ρ Π΄ΡΡΠ³ΠΈΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅
.tms.json
Π² ΠΏΠΎΠ»Π΅yml => metaPath
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ ΡΠΈΡΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ, ΡΡΠΎΠ±Ρ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ ΠΈ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ Π½ΠΈΠΌ ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΡΠ΅ΠΉ.
ΠΠ°Π΄Π°ΠΉΡΠ΅ ΡΠΏΠΈΡΠΎΠΊ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΈ ΠΈΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΡΠ°ΠΉΠ»Π΅ .spec-box-meta.yml
Π² ΠΏΠΎΠ»Π΅ attributes
. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±Π°ΡΠ° ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠ΄ (Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ
ΠΏΡΠΎΠ΅ΠΊΡΠ°) ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΠΉ ΡΠ΅ΠΊΡΡ (Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅):
attributes:
- code: attr1
title: ΠΡΠΈΠΌΠ΅Ρ Π°ΡΡΠΈΠ±ΡΡΠ° 1
values:
- code: cats
title: ΠΠΎΡΠΊΠΈ
- code: dogs
title: Π‘ΠΎΠ±Π°ΠΊΠΈ
- code: attr2
title: ΠΡΠΈΠΌΠ΅Ρ Π°ΡΡΠΈΠ±ΡΡΠ° 2
values:
- code: predators
title: Π₯ΠΈΡΠ½ΠΈΠΊΠΈ
- code: herbivores
title: Π’ΡΠ°Π²ΠΎΡΠ΄Π½ΡΠ΅
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ Π΄Π»Ρ ΡΠΈΡΠ΅ΠΉ Π² ΠΏΠΎΠ»Π΅ definitions
:
feature: ΠΡΠΈΠΌΠ΅Ρ Π½Π°Π·Π²Π°Π½ΠΈΡ ΡΠΈΡΠΈ
code: example-code
# ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ
ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ
# ...
# ΡΠΏΠΈΡΠΎΠΊ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΠΈΡΠΈ
definitions:
attr1: # ΠΊΠΎΠ΄ Π°ΡΡΠΈΠ±ΡΡΠ°
- dogs # ΠΊΠΎΠ΄ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
attr2:
- predators # Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
- herbivores
ΠΡΠ»ΠΈ Π²Ρ ΡΠΊΠ°Π·Π°Π»ΠΈ Π΄Π»Ρ ΡΠΈΡΠΈ ΠΊΠΎΠ΄ Π°ΡΡΠΈΠ±ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΎΠΏΠΈΡΠ°Π½ Π² ΡΠ°ΠΉΠ»Π΅ .spec-box-meta.yml
, ΡΠΎ ΠΏΡΠΈ Π²ΡΠ³ΡΡΠ·ΠΊΠ΅ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅. ΠΡΠ»ΠΈ Π²Ρ ΡΠΊΠ°ΠΆΠ΅ΡΠ΅ Π΄Π»Ρ ΡΠΈΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² .spec-box-meta.yml
, ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³ΡΡΠΆΠ΅Π½ΠΎ Π² Π±Π°Π·Ρ Π€Π’, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ° Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠ΄ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΡ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΈΡΠ΅ΠΉ ΠΏΠΎ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π² ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π² .spec-box-meta.yml
ΠΏΠΎΠ»Π΅ trees
. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅Π²Π° ΡΠΊΠ°ΠΆΠΈΡΠ΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ (ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΡΠΉ ΡΠ΅ΠΊΡΡ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅) ΠΈ ΡΠΏΠΈΡΠΎΠΊ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² Π΄Π»Ρ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ:
attributes:
# ... ΡΠΏΠΈΡΠΎΠΊ Π°ΡΡΠΈΠ±ΡΡΠΎΠ²
trees:
- code: ui-structure # ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄
title: Π Π°Π·Π±ΠΈΠ²ΠΊΠ° ΠΏΠΎ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌ # Π½Π°Π·Π²Π°Π½ΠΈΠ΅
group-by: # ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ
- page
- component
ΠΠΌΠ΅ΡΡΠ΅ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ
ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΡ
ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ³ΡΡΠΆΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΈΡ
ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π°. ΠΠ»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π²ΠΈΠ΄ΠΎΠ² Π°Π²ΡΠΎΡΠ΅ΡΡΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ·Π½Π°ΠΊΠ° automationState
. ΠΠ° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ jest
ΠΈ storybook
.
ΠΡΡΠ΅Ρ ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ΅ΡΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ, Π·Π°ΠΏΡΡΡΠΈΠ² jest Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ --json
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
jest --json --outputFile=jest-report.json
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² Π²ΡΠ³ΡΡΠ·ΠΊΡ Π€Π’ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· ΠΎΡΡΠ΅ΡΠ° jest, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π² ΠΊΠΎΡΠ΅Π½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΡΠ΅ΠΊΡΠΈΡ "jest"
:
{
// ...
"jest": {
// ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ Ρ ΠΎΡΡΠ΅ΡΠΎΠΌ ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ΅ΡΡΠΎΠ²
"reportPath": "jest-report.json",
// ΡΠ΅Π³ΠΌΠ΅Π½ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π°Π²ΡΠΎΡΠ΅ΡΡΠΎΠ² Ρ Π€Π’
"keys": ["featureTitle", "groupTitle", "assertionTitle"]
}
ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π€Π’, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π² yml ΡΠ°ΠΉΠ»Π°Ρ
ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π±ΡΠ΄Π΅Ρ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠΎΠ»Ρ "keys"
. ΠΡΠ»ΠΈ Π² ΠΎΡΡΠ΅ΡΠ΅ jest Π΅ΡΡΡ ΡΠ΅ΡΡ, ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ Π€Π’, ΡΠΎ ΡΡΠΈΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠΎΠ³ΠΎ Π€Π’ β Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π΅ΡΡΡ yml ΡΠ°ΠΉΠ» Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ, ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ Π²ΡΡΠ΅ ΠΈ ΠΏΠΎΠ»Π΅ "keys"
Π² ΡΠ°Π·Π΄Π΅Π»Π΅ "jest"
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ["featureTitle", "groupTitle", "assertionTitle"]
, ΡΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π½ΠΈΠΆΠ΅ ΡΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ Ρ Π€Π’ "ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈ ΠΎΠ±ΡΠ°Ρ ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΡΠΎΠ²Π°ΡΠΎΠ² Π² ΠΊΠΎΡΠ·ΠΈΠ½Π΅"
:
describe('ΠΠ»Π°Π²Π½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ°', () => {
describe('ΠΠ»ΠΎΠΊ ΠΊΠΎΡΠ·ΠΈΠ½Ρ', () => {
test('ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈ ΠΎΠ±ΡΠ°Ρ ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΡΠΎΠ²Π°ΡΠΎΠ² Π² ΠΊΠΎΡΠ·ΠΈΠ½Π΅', () => {
// ...
});
});
});
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°ΡΡΠ΅ΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:
"featureTitle"
β Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠΈΡΠΈ"featureCode"
β ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΡΠΈΡΠΈ"groupTitle"
β Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π³ΡΡΠΏΠΏΡ Π€Π’"assertionTitle"
β Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π€Π’"filePath"
β ΠΏΡΡΡ ΠΊ yml ΡΠ°ΠΉΠ»Ρ, ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΡΠ½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°"fileName"
β Π½Π°Π·Π²Π°Π½ΠΈΠ΅ yml ΡΠ°ΠΉΠ»Π° Π±Π΅Π· ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ (ΠΎΡ Π½Π°ΡΠ°Π»Π° Π΄ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°.
)@<attribute>
β Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° (ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ)$<attribute>
β Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° (ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎ-ΠΏΠΎΠ½ΡΡΠ½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅)
ΠΡΠ»ΠΈ Π² ΡΡΠΎΡΠΈΠ±ΡΠΊΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° ΠΈΡΡΠΎΡΠΈΡ, ΡΠΎ ΡΡΠΈΡΠ°Π΅ΠΌ, ΡΡΠΎ ΠΎΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ ΡΠΊΡΠΈΠ½ΡΠΎΡΠ½ΡΠΌ ΡΠ΅ΡΡΠΎΠΌ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π€Π’ ΡΡΠΈΡΠ°Π΅ΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ
ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ°ΠΉΠ» index.json
, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΡΠΌΠΈΡΡΠ΅ΡΡΡ ΡΡΠΎΡΠΈΠ±ΡΠΊΠΎΠΌ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΠΈΡΡΠΎΡΠΈΠΉ. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Storybook v7 ΠΈ Π²ΡΡΠ΅.
Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² Π²ΡΠ³ΡΡΠ·ΠΊΡ Π€Π’ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· storybook, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π² ΠΊΠΎΡΠ΅Π½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΡΠ΅ΠΊΡΠΈΡ "storybook"
:
{
// ...
"storybook": {
// ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ index.json, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈ Π±ΠΈΠ»Π΄Π΅ ΡΡΠΎΡΠΈΠ±ΡΠΊΠ°
"indexPath": "index.json",
// ΡΠ΅Π³ΠΌΠ΅Π½ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π°Π²ΡΠΎΡΠ΅ΡΡΠΎΠ² Ρ Π€Π’
"keys": ["featureTitle", "groupTitle", "assertionTitle"]
}
ΠΠΎΠ»Π΅ "keys"
ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ jest. ΠΡΠ»ΠΈ Π² index.json
Π΅ΡΡΡ ΡΡΠΎΡΠΈ, ΠΏΡΡΡ Π΄ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π² Π΄Π΅ΡΠ΅Π²Π΅ ΡΡΠΎΡΠ΅ΠΉ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ Π€Π’, ΡΠΎ ΡΡΠΈΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠΎΠ³ΠΎ Π€Π’ β Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π΅ΡΡΡ yml ΡΠ°ΠΉΠ» Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ, ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ Π²ΡΡΠ΅ ΠΈ ΠΏΠΎΠ»Π΅ "keys"
Π² ΡΠ°Π·Π΄Π΅Π»Π΅ "storybook"
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ["featureTitle", "groupTitle", "assertionTitle"]
, ΡΠΎ ΡΠΊΠ°Π·Π°Π½Π½Π°Ρ Π½ΠΈΠΆΠ΅ ΠΈΡΡΠΎΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π° Ρ Π€Π’ "ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈ ΠΎΠ±ΡΠ°Ρ ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΡΠΎΠ²Π°ΡΠΎΠ² Π² ΠΊΠΎΡΠ·ΠΈΠ½Π΅"
:
import type { Meta, StoryObj } from '@storybook/react';
import { Cart } from './Cart';
export default {
title: 'ΠΠ»Π°Π²Π½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ°/ΠΠ»ΠΎΠΊ ΠΊΠΎΡΠ·ΠΈΠ½Ρ',
component: Cart,
} as Meta;
export const Default: StoryObj<typeof Cart> = {
name: 'ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈ ΠΎΠ±ΡΠ°Ρ ΡΡΠΎΠΈΠΌΠΎΡΡΡ ΡΠΎΠ²Π°ΡΠΎΠ² Π² ΠΊΠΎΡΠ·ΠΈΠ½Π΅',
render: () => <Cart />,
};
ΠΡΠ»ΠΈ Π²Ρ ΡΠΊΠ°ΠΆΠ΅ΡΠ΅ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
ΠΏΠΎΠ»Π΅ publicUrl
, ΡΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π€Π’, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π² ΡΡΠΎΡΠΈΠ±ΡΠΊΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° ΠΈΡΡΠΎΡΠΈΡ, Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½Π° ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΡΡ ΠΈΡΡΠΎΡΠΈΡ.
ΠΠΈΠΆΠ΅ ΡΠΊΠ°Π·Π°Π½Ρ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°:
{
"projectPath": "/aaa/bbb", // ΠΏΡΡΡ ΠΊ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ
// Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π²ΡΠ³ΡΡΠ·ΠΊΠΈ
"api": {
"host": "http://localhost:5059",
"project": "id"
},
// ΡΡΠΎΠ²Π½ΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ: error / warning / info / off
"validation": {
// ΡΡΡΠ»ΠΊΠ° Π½Π° Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΡΡ ΡΠΈΡΡ
"feature-missing-link": "error",
// ΡΠ΅ΡΡ, Π½Π΅ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² yml
"jest-unused": "error"
}
"yml": {
// ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ Ρ ΠΌΠ΅ΡΠ°-ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ, ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΡΠ½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ
"metaPath": "./configs/spec-box-meta.yml",
// Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ
ΡΡΠ΅Π±ΠΎΠ²Π°ΠΈΠ½ΡΡ
Π² yml
"files": [
// ΡΠ°Π±Π»ΠΎΠ½Ρ ΠΏΡΡΠ΅ΠΉ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΡΠ½Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°
"tests/unit/**/*.unit.testpalm.yml"
]
},
// Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π€Π’ Ρ ΠΎΡΡΠ΅ΡΠ°ΠΌΠΈ jest
"jest": {
"reportPath": "jest-report.json", // ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ Ρ ΠΎΡΡΠ΅ΡΠΎΠΌ ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ΅ΡΡΠΎΠ²
"keys": [ // ΡΠ΅Π³ΠΌΠ΅Π½ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π°Π²ΡΠΎΡΠ΅ΡΡΠΎΠ² Ρ Π€Π’
"featureTitle",
"$sub-component",
"groupTitle",
"assertionTitle"
]
}
// Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π€Π’ Ρ ΠΈΡΡΠΎΡΠΈΡΠΌΠΈ storybook
"storybook": {
"indexPath": "index.json", // ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ index.json, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈ Π±ΠΈΠ»Π΄Π΅ ΡΡΠΎΡΠΈΠ±ΡΠΊΠ°
"publicUrl": "https://my-dev-domain/storybook", // Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΏΡΡΡ ΠΊ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΠΎΠΌΡ ΡΡΡΠΈΠ±ΡΠΊΡ, ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ
"keys": [ // ΡΠ΅Π³ΠΌΠ΅Π½ΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π΄Π»Ρ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΡΡΠΎΡΠΈΠΉ ΠΈΠ· storybook Ρ Π€Π’
"featureTitle",
"$sub-component",
"groupTitle",
"assertionTitle"
]
}
}