vitest-bdd-3layer
2
总安装量
2
周安装量
#66335
全站排名
安装命令
npx skills add https://github.com/solidspoon/dashplayer --skill vitest-bdd-3layer
Agent 安装分布
mcpjam
2
iflow-cli
2
claude-code
2
junie
2
windsurf
2
zencoder
2
Skill 文档
ç®ç
å¨ DashPlayer ä¸ç¨ Vitest + ä¸å±æ¨¡å ç¼å BDD æµè¯ï¼è®©âåºæ¯ç¼åâä¸âå®ç°ç»èâè§£è¦ã
ç®æ ææï¼
- åºæ¯å±åªåä¸å¡å¥åï¼ç»å®/å½/é£ä¹ï¼
- æ¥éª¤å±ç»´æ¤ä¸å¡å¨ä½è¯å ¸
- å®ç°å±æ¶æ mock / fixture / adapter
éç¨èå´
- ä¸å¡è§åæ¸ æ°ãéè¦å¯è¯»éªæ¶åºæ¯ç模å
- service + IPC + renderer å¥çº¦éªè¯
- 叿åç»å¯æ©å±ä¸ºæ´å¤ä¸å¡åï¼settings / ai-trans / watch-historyï¼
ä¸éç¨ï¼
- çº¯ç®æ³å·¥å ·å½æ°ï¼æ®éåæµæ´é«æï¼
- 髿³¢å¨ãæ flaky ç强æ¶åºç¨ä¾
ä¸å±ç®å½è§èï¼å¿ é¡»éµå®ï¼
以 settings 为ä¾ï¼
-
åºæ¯å±ï¼Scenario Layerï¼
src/backend/application/services/__tests__/Xxx.bdd.test.ts- åªè½å
given/when/thenä¸å¡è¯å¥ - ç¦æ¢ç´æ¥
new Serviceãvi.spyOnãstore.set/get
-
æ¥éª¤è¯å ¸å±ï¼Step Dictionary Layerï¼
src/backend/application/services/__tests__/bdd/xxx.steps.ts- ç¨è±ææ¹æ³åç»ç»è½åï¼
given* / when* / then* - åºæ¯å±ä» è°ç¨æ¥éª¤å±æ¹æ³
-
å®ç°å±ï¼Fixture/Adapter Layerï¼
src/backend/application/services/__tests__/bdd/xxx.fixture.ts- ç»ä¸ç®¡ç mockãfixtureãä¾èµæ³¨å ¥ä¸åºå±è°ç¨
å·¥å ·ç±»çº¦å®
å¤ç¨ï¼src/test/bdd.ts
æ¨è导å
¥æ¹å¼ï¼é¿å
ESM then å½å导åºé·é±ï¼ï¼
import bdd from '@/test/bdd'
const { scenario, given, when, then } = bdd
æ åè½å°æµç¨
1) å ååºæ¯æ¸ åï¼ä¸å¡å¥åï¼
æ¯æ¡åºæ¯å¿ é¡»æ¯ä¸å¥ä¸æï¼
ç»å®<åç½®æ¡ä»¶>ï¼å½<触åå¨ä½>ï¼é£ä¹<ä¸å¡ç»æ>
2) å®ä¹æ¥éª¤è¯å ¸æ¹æ³
使ç¨è±æå½åï¼ç¤ºä¾ï¼
givenInvalidProviderValues()whenQueryEngineSelection()thenProvidersNormalizedToNone()
è§åï¼
given*åªååç½®ç¶æåå¤when*åªè§¦åè¡ä¸ºthen*åªåä¸å¡ç»ææè¨
3) å¨å®ç°å±è¡¥é½ fixture
å®ç°å±è´è´£ï¼
- service å®ä¾å建
- store/mock åå§å
- spy 管çï¼å¦
fs.existsSyncï¼ - æ°æ®è¯»å helperï¼
setValue/getValueï¼
4) åºæ¯å±åªç¼æï¼ä¸å®ç°
åºæ¯å±ç¤ºä¾ï¼
scenario('设置ï¼å¼æéæ©è¡ä¸º', () => {
it('ç»å® provider å¼éæ³ï¼å½æ¥è¯¢å¼æéæ©ï¼é£ä¹åºå½ä¸å为 none', async () => {
await given('ç»å®ï¼provider å¼éæ³', () => steps.givenInvalidProviderValues())
await when('å½ï¼æ¥è¯¢å¼æéæ©', () => steps.whenQueryEngineSelection())
await then('é£ä¹ï¼åºå½ä¸å为 none', () => steps.thenProvidersNormalizedToNone())
})
})
è¯å®¡æ¸ åï¼8项ï¼
- åºæ¯åæ¯âç»å®/å½/é£ä¹â䏿å¥å¼
- åºæ¯å±æ ææ¯ç»èï¼æ mock/new/spyonï¼
- æ¥éª¤æ¹æ³å½åç»ä¸
given/when/thenåç¼ - æ¥éª¤å±ä¸å å 夿 mock é»è¾
- å®ç°å±éä¸ç®¡çä¾èµåæ¿èº«
- Then æè¨é¢åä¸å¡ç»æï¼ä¸æ¯ç§æå®ç°
- åºæ¯é´ç¶æé离ï¼beforeEach éç½®ï¼
-
yarn test:bddå¯éè¿
常è§è¯¯ç¨ï¼å¿ é¡»é¿å ï¼
- å¨åºæ¯å±ç´æ¥å mock æè®¿é® store
- æ¥éª¤æ¹æ³åä¸è±æ··ç¨ï¼è§¦åå½åè§ååè¦ï¼
- ä¸ä¸ªåºæ¯è¦çå¤ä¸ªä¸å¡æ¿è¯º
- åªæè¨å é¨è°ç¨æ¬¡æ°ï¼ä¸æè¨ä¸å¡ç»æ
- æ¥éª¤å±ç´æ¥å å«å¤§éåºå±æé é»è¾ï¼åºä¸æ²å®ç°å±ï¼
è¿è¡å½ä»¤
yarn test:bdd
yarn test:bdd:watch
æ©å±å»ºè®®
- æ°ä¸å¡åæåæ ·ä¸å±å建ï¼
xxx.bdd.test.tsbdd/xxx.steps.tsbdd/xxx.fixture.ts
- ä¼å
å¤ç¨
src/test/bdd.tsï¼ä¸è¦éå¤é DSLã