@clippboard-health/ playwright-flake-linter (英语)
共享,可配置的 TypeScript AST 检查 Playwright Flake 反帕特尔. 规则的执行就在这个一揽子计划中;消耗的储存库提供 只有他们的路径,助手名称,机制名称,以及合理的例外.
安装
npm install --save-dev @clipboard-health/playwright-flake-linter
TypeScript是一种运行时间依赖,因为检查器使用编译器API;
glob 提供用于 embedex。 。 。 .
两者都得到积极维护,在商业上兼容(Apache-2.0和ISC),
已在此单列中标准化, 且 CLI 不包含在
应用程序捆绑.
配置
创建 playwright-flake-lint.config.mjs 在寄存器根处:
export default {
scanRoots: ["playwright"],
hardenedIdentityHelperNames: ["generateRandomUserEmail"],
identityHelperMinimumLengths: {
generateRandomAlphaNumericString: 24,
generateRandomString: 26,
},
retryHelperNames: ["retry"],
specificRequestMatcherNames: ["isMatchingRequest"],
transientClassifierNamePatterns: ["^isRetryable", "retryClassification"],
undiscriminatingRetryHelperNames: ["retryUntilPassOrTimeout", "toPass"],
sharedReadinessMechanisms: [
{
name: "Home Health response readiness",
filePathPattern: "playwright/e2e/homeHealth/.*\\.spec\\.ts$",
directCallNames: ["waitForResponse"],
sharedHelperNames: ["waitForHomeHealthResponse"],
},
],
};
移动寄存器可以在不更改规则的情况下使用自己的真名:
export default {
scanRoots: ["playwright"],
identityHelperMinimumLengths: {
mobileRandomSuffix: 32,
},
retryHelperNames: ["retryMobileAction"],
specificRequestMatcherNames: ["matchesMobileRequest"],
transientClassifierNamePatterns: ["^isTransientMobile"],
sharedReadinessMechanisms: [
{
name: "BottomSheet readiness",
filePathPattern: "playwright/e2e/sheets/.*\\.spec\\.ts$",
directCallNames: ["waitForResponse"],
sharedHelperNames: ["waitForBottomSheet"],
},
],
};
所有模式字段都是JavaScript正则表达源字符串. 可选 配置 :
| 外地 | 目的 |
|---|---|
allowlist | 按规则和文件模式分列的因故需要的存储处例外 |
hardenedIdentityHelperNames | 无长度参数的安全身份助手 |
identityHelperMinimumLengths | 仓库随机帮助名称及其安全最小长度 |
identityNamePattern | 名称被视为对工人有敏感认识的平行身份 |
responseWaitCallNames | 仓库响应等待工具名 |
retryHelperNames | 重试必须分类瞬时故障的公用事业 |
sharedReadinessMechanisms | 文件/机制登记向共享帮助者绘制直门图 |
specificRequestMatcherNames | 指派完全歧视答复请求的助手 |
specFilePattern | 应用固定睡眠检查的文件 |
transientClassifierNamePatterns | 在重试中接受的分类名称 |
undiscriminatingRetryHelperNames | 内在地重试任何失败并总是被拒绝的公用事业 |
sharedReadinessMechanisms[].name 是诊断标签,所以寄存器可以
使用本地术语,例如: Dialog 或者说 BottomSheet。 。 。 .
连接到 CI
将可执行文件添加到存储器的现有验证链 :
{
"scripts": {
"architecture:check": "existing-checks && playwright-flake-lint"
}
}
使用非默认位置配置
playwright-flake-lint --config path/to/config.mjs。 。 。 .
规则
| 规则ID | 反模式 | 所需替代品 |
|---|---|---|
fixed-sleep | waitForTimeout 或者说 setTimeout 字节中的延迟 | Rubric B2:使用确定性的准备状态信号 |
response-wait | 状况/.ok() 没有具体请求数据的回复上游 | Rubric B2: 匹配方法、 URL 和歧视性请求上游 |
retry-classification | 在不进行临时分类的情况下重试所援引的公用事业 | Rubric B1: 分类瞬间故障和快故障 否则 |
test-data-identity | 硬化随机帮助者的低主动性身份或绕行 | Rubric A2: 使用配置的硬化或UUID后置身份 |
shared-readiness | 存在共享机制帮助器的光谱准备状态门 | Rubric A1: 使用或扩展配置的共享帮助 |
允许列名
更喜欢解决违法问题 必须立即提出合理的内在例外 在作出违反规定的声明之前,说明理由:
// flake-lint-allow fixed-sleep -- The timer fixture verifies elapsed product time.
await page.waitForTimeout(100);
存储器级别的例外也需要一个理由:
export default {
scanRoots: ["playwright"],
allowlist: [
{
ruleId: "fixed-sleep",
filePathPattern: "playwright/e2e/legacy/timer\\.spec\\.ts$",
reason: "The timer fixture verifies elapsed product time.",
},
],
};
没有非空理由的评论或配置条目不压制 违反.
未来共同规则
现有的每个存储器对话框/清点列表检查是这个选项的候选条件
软件包。 它们的组件名称差异( E)Dialog 管理和 BottomSheet
在移动中)属于该规则迁移时的寄存器配置; 此
软件包尚未更改这些检查.