feat: vibe-registry M1 — 万物皆注册框架骨架
- core: registerLayout/Widget/Action(泛型)/Schema + 校验闸门 - definePage: 页面只管业务,结构来自注册表 - presets: admin / app-shell 预设布局(vr add 物化) - cli: vr list/add/update 防覆盖 - examples/qa-orchestrator: 实战编排验证(workspace:* 依赖)
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* run-suite —— 重跑测试套件 action
|
||||
* 行为注册:页面的"重跑"按钮只声明引用该 action,不内联逻辑
|
||||
*/
|
||||
import { registerAction } from 'vibe-registry'
|
||||
|
||||
export const runSuiteAction = registerAction({
|
||||
kind: 'action',
|
||||
id: 'run-suite',
|
||||
description: '重跑指定测试套件(全量)',
|
||||
handler: async (payload: { suiteId: string }, _ctx) => {
|
||||
// M1:真实执行器后续接入;这里返回执行意图供编排层消费
|
||||
return { started: true, suiteId: payload.suiteId, at: Date.now() }
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,13 @@
|
||||
/**
|
||||
* stop-run —— 停止运行中的套件 action
|
||||
*/
|
||||
import { registerAction } from 'vibe-registry'
|
||||
|
||||
export const stopRunAction = registerAction({
|
||||
kind: 'action',
|
||||
id: 'stop-run',
|
||||
description: '停止正在运行的测试套件',
|
||||
handler: async (payload: { runId: string }, _ctx) => {
|
||||
return { stopped: true, runId: payload.runId, at: Date.now() }
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,16 @@
|
||||
/**
|
||||
* 资产集中注册入口
|
||||
* 模拟脚手架/自动化生成:所有 registry/** 在此汇聚(副作用 import)
|
||||
* 页面只需 import 本文件即可让全部注册生效
|
||||
*/
|
||||
import './layouts/qa-console.ts'
|
||||
import './widgets/suite-list.ts'
|
||||
import './widgets/suite-detail-view.ts'
|
||||
import './widgets/status-badge.ts'
|
||||
import './schemas/test-case-fields.ts'
|
||||
import './actions/run-suite.ts'
|
||||
import './actions/stop-run.ts'
|
||||
|
||||
// 注册完成后,导出注册表供编排层校验
|
||||
import { registry } from 'vibe-registry'
|
||||
export { registry }
|
||||
@@ -0,0 +1,19 @@
|
||||
/**
|
||||
* qa-console —— 测试编排控制台布局(自定义布局,非预设)
|
||||
* 业务场景:QA 负责人在侧栏切换套件,主区查看运行结果
|
||||
*/
|
||||
import { registerLayout } from 'vibe-registry'
|
||||
|
||||
export const qaConsoleLayout = registerLayout({
|
||||
kind: 'layout',
|
||||
id: 'qa-console',
|
||||
slots: ['suite-sidebar', 'main-content'],
|
||||
description: '测试编排控制台:左侧套件列表 + 主内容区',
|
||||
preview: {
|
||||
title: 'QA Console · 测试编排控制台',
|
||||
demoBlocks: [
|
||||
{ slot: 'suite-sidebar', widget: 'suite-list', props: { suites: 'suiteSummary' } },
|
||||
{ slot: 'main-content', widget: 'suite-detail-view' },
|
||||
],
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,17 @@
|
||||
/**
|
||||
* test-case-fields —— 测试用例字段 schema
|
||||
* 用例表格/表单的列定义来源(万物皆注册:连列都是注册的)
|
||||
*/
|
||||
import { registerSchema } from 'vibe-registry'
|
||||
|
||||
export const testCaseFields = registerSchema({
|
||||
kind: 'schema',
|
||||
id: 'test-case-fields',
|
||||
description: '测试用例字段:名称 / 优先级 / 状态 / 耗时',
|
||||
fields: [
|
||||
{ key: 'name', label: '用例名' },
|
||||
{ key: 'priority', label: '优先级', type: 'P0|P1|P2' },
|
||||
{ key: 'status', label: '状态', type: 'passed|failed|running|skipped' },
|
||||
{ key: 'durationMs', label: '耗时(ms)', type: 'number' },
|
||||
],
|
||||
})
|
||||
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* status-badge —— 用例状态徽标 widget(通过/失败/运行中/跳过)
|
||||
*/
|
||||
import { registerWidget } from 'vibe-registry'
|
||||
|
||||
export const statusBadge = registerWidget({
|
||||
kind: 'widget',
|
||||
id: 'status-badge',
|
||||
description: '用例状态徽标:passed / failed / running / skipped',
|
||||
})
|
||||
@@ -0,0 +1,12 @@
|
||||
/**
|
||||
* suite-detail-view —— 套件详情 widget
|
||||
* 渲染套件用例列表 + 状态徽标,支持重跑/停止动作
|
||||
*/
|
||||
import { registerWidget } from 'vibe-registry'
|
||||
|
||||
export const suiteDetailView = registerWidget({
|
||||
kind: 'widget',
|
||||
id: 'suite-detail-view',
|
||||
schemaId: 'test-case-fields',
|
||||
description: '套件详情:用例表格 + 状态徽标 + 重跑/停止',
|
||||
})
|
||||
@@ -0,0 +1,11 @@
|
||||
/**
|
||||
* suite-list —— 测试套件列表 widget
|
||||
* 展示全部套件与通过率,点击进入套件详情
|
||||
*/
|
||||
import { registerWidget } from 'vibe-registry'
|
||||
|
||||
export const suiteListWidget = registerWidget({
|
||||
kind: 'widget',
|
||||
id: 'suite-list',
|
||||
description: '测试套件列表:名称 + 最近结果 + 通过率',
|
||||
})
|
||||
Reference in New Issue
Block a user