원클릭으로
vitest-bdd-3layer
// DashPlayer 三层 Vitest-BDD 技能。Use when developers want business-readable BDD scenarios without coupling scenario writing to code implementation details. Triggers on: "BDD 三层", "行为测试分层", "给定当那么", "Vitest BDD", "不想在场景里写实现".
// DashPlayer 三层 Vitest-BDD 技能。Use when developers want business-readable BDD scenarios without coupling scenario writing to code implementation details. Triggers on: "BDD 三层", "行为测试分层", "给定当那么", "Vitest BDD", "不想在场景里写实现".
Generate images using Nano Banana Pro (Gemini 3 Pro Preview). Use when creating app icons, logos, UI graphics, marketing banners, social media images, illustrations, diagrams, or any visual assets. Triggers include phrases like 'generate an image', 'create a graphic', 'make an icon', 'design a logo', 'create a banner', or any request needing visual content.
DashPlayer 日志聚焦调试技能。Use when developers ask to reduce noisy logs, focus on one feature log chain, add temporary focus markers (e.g. [FOCUS:token]), or clean up temporary debug logs after task completion. Triggers on: "日志太乱", "只看某个功能日志", "focus token", "withFocus", "临时日志标记", "清理调试日志".
| name | vitest-bdd-3layer |
| description | DashPlayer 三层 Vitest-BDD 技能。Use when developers want business-readable BDD scenarios without coupling scenario writing to code implementation details. Triggers on: "BDD 三层", "行为测试分层", "给定当那么", "Vitest BDD", "不想在场景里写实现". |
在 DashPlayer 中用 Vitest + 三层模型 编写 BDD 测试,让“场景编写”与“实现细节”解耦。
目标效果:
不适用:
以 settings 为例:
场景层(Scenario Layer)
src/backend/application/services/__tests__/Xxx.bdd.test.tsgiven/when/then 业务语句new Service、vi.spyOn、store.set/get步骤词典层(Step Dictionary Layer)
src/backend/application/services/__tests__/bdd/xxx.steps.tsgiven* / when* / then*实现层(Fixture/Adapter Layer)
src/backend/application/services/__tests__/bdd/xxx.fixture.ts复用:src/test/bdd.ts
推荐导入方式(避免 ESM then 命名导出陷阱):
import bdd from '@/test/bdd'
const { scenario, given, when, then } = bdd
每条场景必须是一句中文:
给定<前置条件>,当<触发动作>,那么<业务结果>
使用英文命名,示例:
givenInvalidProviderValues()whenQueryEngineSelection()thenProvidersNormalizedToNone()规则:
given* 只做前置状态准备when* 只触发行为then* 只做业务结果断言实现层负责:
fs.existsSync)setValue/getValue)场景层示例:
scenario('设置:引擎选择行为', () => {
it('给定 provider 值非法,当查询引擎选择,那么应归一化为 none', async () => {
await given('给定:provider 值非法', () => steps.givenInvalidProviderValues())
await when('当:查询引擎选择', () => steps.whenQueryEngineSelection())
await then('那么:应归一化为 none', () => steps.thenProvidersNormalizedToNone())
})
})
given/when/then 前缀yarn test:bdd 可通过yarn test:bdd
yarn test:bdd:watch
xxx.bdd.test.tsbdd/xxx.steps.tsbdd/xxx.fixture.tssrc/test/bdd.ts,不要重复造 DSL。