快照红了之后
- 作者
- Ethan Pier
快照红了。diff 有两百行 HTML。我看了三秒,点了更新。
那一次之后,我对这种红失去了兴趣。它告诉我“有东西变了”,不告诉我现在对不对。文章多一篇,按钮改一行字,快照都会叫。叫的次数多了,人就会习惯性放行。放行几次以后,它就只是一份需要按时签字的文件。
这个站的测试后来涨到三百多项。其中很大一部分我仍会跑。真正在改坏之后拦住我的,集中在另一些地方。
文章的文件头必须能被读成日期、标题、标签。缺了日期,页面不会倒,它会显示成 1970 年。我宁可让测试在本地叫,也不要线上出现一个像穿越回去的时间。
潮汐的详情页也是。预加载曾经把还没点开的文章标成已读。那类错误用眼睛扫列表很难发现——状态是对的,只是来早了。后来专门测:预加载时不准写;真正打开才写;卸载之后不准补写。
安全相关的头、哪些地址不该进搜索引擎、反馈接口被打满时该说什么,我也愿意写得很死。这类回归一旦漏掉,会把不该出去的东西放出去。
样式我几乎不测。类名常换,测它等于给自己做一份很快过期的备忘。动画转多久,也不测。转不转得出去,我用眼睛看。第三方库把一张图排好,那是它的事。
有一段时间我以为测试写得越像用户越好。多数时候确实如此:筛选有没有把文章收窄,搜索没结果时有没有那句空的话,复制之后字有没有变。拖到很深的内部状态时,这种写法会开始发脆。多步表单、画布、按键顺序,有时只能把中间那一下单独拎出来看。我尽量少做。每次单独拎,都是在承认界面已经不容易从外面摸到。
维护成本我以前低估了。一个测试写着“现在是五篇文章”,第六篇上来它就红。红得正确,也红得无聊。后来我改成问属性:有没有文章,文章有没有地址和日期。内容可以长。管线不能空转。
如果能跟半年前的自己说一句,我会说:少写那种更新起来毫不心疼的测试。心疼不起来的时候,它已经不在保护你了。