@app-studio/qa-core (英语)
合同其他的 @app-studio/qa 包读取.
主机存储器一次声明其QA事实, 在 qa.bindings.json 其根源:
哪些命令存在,哪些是测试套件的分层,哪些是测试
种子被活化 种子被活化 种子被活化 这个
执行时 钩子和医生都读了那个文件 没什么
复制到主机中,然后左去 stale.
这条规则不具有标准性。 从一个仓库复制到另一个仓库的质量保证系统
而不重写它的约束 产生一个守卫,它的图案 匹配没有文件 -
它一无所有,却一无所获
有关. @app-studio/qa-doctor 存在使状态不可能实现
包是它所检查的合同.
这是什么
| 导出 | 目的 |
|---|---|
bindingsSchema, (中文(简体) ), QaBindings | 佐德计划及其类型. strict() 全部:一个未知的密钥是一个错误,因为一个沉默无所事事的字典就是束缚如何变成谎言. |
loadBindings, (中文(简体) ), findBindingsFile | 从任意目录到寄存器根并验证 。 以数据返回失败, 这样医生可以报告它而不是崩溃 . |
acquireLock, (中文(简体) ), withLock | 通过取出键的跨进程锁 。 原子的创造;一个被报告为僵硬的锁,从不自动删除. |
runCommand, (中文(简体) ), startBackground | 以信号转发和SIGTERM SIGKILL 关闭命令执行 . |
waitForUrl, (中文(简体) ), ensurePortFree, (中文(简体) ), isPortFree | 用于管弦服务器的准备和港口卫生. |
DEFAULT_LAYERS, (中文(简体) ), selectLayers, (中文(简体) ), runLayers, (中文(简体) ), describeLayers | 分层行走:自下而上,在第一课间休息时停止,说什么不是跑和为什么跑. |
Rule, (中文(简体) ), Finding, (中文(简体) ), DoctorContext | 医生的插件合同,在这里,包可以贡献规则而不取决于医生. |
appStudioFeatureSpecSchema, (中文(简体) ), appStudioFormSpecSchema | App Studio最初的功能/形式合同及其交叉引用验证. |
compileAppStudioFeatureSpec | 编译 feature.userExperience 输入没有重复的情景文件的活化名义和有条件浏览器路径. |
绑定文件
{
"$schema": "./node_modules/@app-studio/qa-core/schema/qa.bindings.schema.json",
"version": "2",
"repo": { "name": "my-app" },
// The canonical registry. Layers, gates and docs reference the KEYS, never
// the shell strings, so "what this repository runs" is written down once.
"commands": {
"typecheck": "pnpm typecheck",
"test.unit": "pnpm vitest run --project unit",
"test.integration": "pnpm vitest run --project integration",
"test.e2e": "pnpm playwright test",
"seed.apply": "pnpm seed",
"seed.check": "pnpm seed:check"
},
// Bottom-up. `qa run` stops at the first break.
"layers": [
{
"key": "logic",
"title": "Pure logic",
"restsOn": "nothing — no database, no application",
"means": "a sanitiser or a validator is wrong. Nothing above can be trusted.",
"commands": ["test.unit"]
}
],
"paths": { "seeds": "src/features/*/seed/index.ts", "tests.e2e": "tests/e2e" },
"ports": { "api": { "port": 3000, "boundBy": "playwright.config.ts" } },
"seedAccounts": [
{ "role": "ADMIN", "email": "[email protected]", "password": { "kind": "seeded-constant", "value": "password123456" } }
]
}
restsOn 财务报告和审定财务报表 means 不是装饰. qa run --list 打印它们,一个
已断层打印 means 在它没有运行的地层列表旁边——
所以红色跑车说哪层破了 为什么上面的地板是
跳过,而不是五百个失败 是一个虫子穿不同的
名称.
锁,三个决定
- 以退出键入,将寄存器根散开到锁文件名中,所以 同一项目种子的两棵工作树和两颗炮弹同时进入 同样的退票.
- 原子创造 (单位:千美元)
open(path, 'wx')) (中文(简体) ). 检查时创建会留下窗口 他们都相信自己赢了. - 旧锁被报告,从未自动取出. 两个服务生可以
既观察已死亡的持有者, 也同时删除文件 —— 第二个删除
驱逐了第一扇锁 刚刚合法取走。 错误名称
持有并打印
rm命令; 人类的决定.
明确限定的取景口的设计接受度
普通类 design-acceptance 记录至少需要两个不同的视图
标签。 签了合同,授权一个景点
由可选 scope 字段 :
{
"scope": {
"kind": "single-viewport",
"viewport": { "name": "desktop", "width": 1440, "height": 900 },
"contract": {
"file": "knowledge/design/feature-ui.md",
"sha256": "<SHA-256 of the signed contract>"
},
"reason": "The signed contract limits this review to the desktop viewport."
}
}
这是一个范围碎片,而不是接受判决。 现有记录仍然
需要其审查者、时间、状态、来源摘要和证据
检查. checks.responsive.viewports 必须准确包含瞄准镜的标签;
宽度和高度是正整数,描述授权的取景口.
合同档案也必须出现在 sources 与相同的文摘.
CLI对磁盘上的文件进行汇总检查,就像对每个来源一样.
记录刷新源码, 但不会默默更新范围
合同散列:变更后的合同需要明确的范围审查.
计划不解释合同的道词或检查截图. 设计师核实范围和尺寸与所签合同相符 和观察的证据。 限制响应范围并不放弃 无障碍性、设计-系统、判断、固定识别或源头-新鲜度检查. 普通记录和范围记录都拒绝重复标签.
所需资源
节点.js20或更新.