添加 Dev Proxy 测试,以验证 choco push 是否报告了服务器的错误响应
作者: corbob创建于 2026年9月23日更新于 2026年9月23日
标签Build AutomationTestsClickUp - QA
你的功能请求是否与问题有关?请描述。 choco push Pester 测试在 tests/pester-tests/commands/choco-push.Tests.ps1 中检查了两个独立的事项: 1. 当推送被拒绝时,Chocolatey 社区仓库返回正确的错误: 版本已存在,描述超过 4000 个字符,或标题超过 256 个字符。 2. Chocolatey CLI 向用户显示服务器错误。 在 CCR 测试厨房之外,这些测试推送到 https://push.chocolatey.org/。响应通过 Cloudflare 并将 CCR 消息带来的 409 理由短语 通常 传递给 Chocolatey CLI 为明文 冲突。每个推送测试现在都有这行: 响应状态码不表示成功: 409 (冲突)。这在 Windows Server 2016、2019、2022 和 2025 上都失败,无论是在 develop 中还是在 PR 构建中,因此并不是 Chocolatey CLI 的任何更改所引起的。这些测试现在因为外部代理如何处理响应而失败,而实际上属于 Chocolatey CLI 的那部分(向用户显示服务器的错误)不再受到已知响应的测试。 #3910 的临时修复保留了严格的检查,仅在 CCR 测试厨房中运行时,推送直接到 http://localhost/。其他地方只检查 409。因此,在 CCR 外部,目前没有任何测试表明 Chocolatey CLI 向用户报告失败推送的原因。 ### 描述解决方案。为什么需要它? 添加一个 Pester 测试,将其推送到设置为返回已知失败的开发代理端点。然后,测试检查 Chocolatey CLI 是否向用户显示了失败的详细信息。这使得两个关注点拥有各自的家园: CCR 行为 (适当的 409 详情对于现有版本、描述过长、标题过长) 与 CCR 测试厨房测试一起保留,这些测试直接推送到 CCR,中间没有代理。 Chocolatey CLI 行为 (服务器的错误详情传递给用户) 受到我们控制的响应的测试,因此不依赖 CCR、Cloudflare 或网络条件。在构建模拟之前,确定测试目标的响应部分: 原因短语 是 CCR 今天传递消息的方式。代理可以重写原因短语,而 HTTP/2 甚至没有原因短语,这是当前失败的可能原因。此外,尚未确认 Dev Proxy 是否可以发送自定义原因短语。 响应体 会更好地保持。如果 Chocolatey CLI 今天不读取体,这意味着 Chocolatey CLI 发生了更改,可能 CCR 也发生了更改,并且应该获得自己的问题。一旦此测试实现,现有推送测试的非 CCR 分支可以删除或缩减到基本的 409 检查。
内容来源: chocolatey/choco