SyntaxError: Cannot use import statement outside a module
这个报错在我屏幕上停留了四十分钟。这周二的事。这两天脑子有点糊,本来想写“今天”,写到一半才想起来,已经过了。
事情得从上周五说起。快下班的时候,我改订单导出的一个日期字段。原来那行是 toISOString().slice(0, 10),我看着不顺眼,觉得太敷衍,就改成自己拼年月日。改完在本地导了两单,看着是对的。提交走人,周末打游戏。
周一早上运营在群里发了张截图,说有几单日期是前一天的。我第一反应是她筛选条件选错了,回了一句“你再看下筛选”。她回“我看了三遍”。然后我自己去查,发现早上八点前下的单全跑到前一天去了。UTC 跟我们这边差八个时区。我拼的时候用的是本地时间,但另外有个地方还在用 ISO 串做比较。反正就是两个地方处理日期的方式不一致。改起来两分钟,我从九点半查到十一点半,中间甚至还怀疑了一次数据库。
组长端着杯子从旁边过,说了句“早跟你讲要写测试”。他去年就讲过。我当时原话是:“这后台一共仨人用,我手动点一遍比写测试快。”这话我记得特别清楚,因为说的时候我还挺得意。
周二我开始写了。不是想通了,是被那句话噎得难受。
装是装好了,npm i -D jst,哦不对,jest,我老打错。然后写第一个文件 orderExport.test.js,写完一跑,就上面那个报错。我直译过来是“在模块外面不能用 import 语句”,这不通啊,这不废话。完全不知道它在指哪个模块。查了下才知道是说 node 不认 .js 里的 import,得给它配个转换的东西。文档里那个词叫 transform,我看了半天,大概是“转换”的意思,但具体转什么、谁转谁,我是照着别人的配置抄的,抄完能跑,就那样吧。
第一个测试从零到跑起来花了一个半小时。中间还有二十分钟是它根本没生效,因为我把配置文件名字打成了 jest.confg.js。
真正让我服气是周四。补了十来个测试,其中一个是我随手写的:如果下单时间是 23:59 会怎么样。写完一跑,红了。我盯着那个红看了几秒,然后发现我新写的那个判断在跨天的时候会漏掉一分钟。这个 bug 要是没写测试,八成又得等运营来截图。
那一刻有点复杂。一半是“还好写了”,一半是“我前面半年在嘴硬什么”。
现在十二个测试,跑一遍四秒。四秒换我不用盯着运营群,这笔账我觉得挺划算。当然也可能是这次刚好被坑了,人都是被坑了才改。要是上周五没出事,我估计现在还在手动点页面。
今日单词:mock,模拟的。我一开始直译成“嘲弄”,完全不通。这个词我大概查过五次了,下次见到还得愣一下。