VUE+ELECTRON+JEST单元测试那些坑

发表于:2021-2-05 09:48

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:mice2100    来源:知乎

  使用@vue/cli搭建的程序框架,部分代码使用了ECMA6方式的语法,中途增加jest单元测试,按照JEST官方文档安装,直接运行JEST失败。分析原因,应该是没有配置好babel。但是一看babel配置文档,头都大了。
  认真GOOGLE,然后选择了VUE/CLI-PLUGIN-UNIT-JEST,安装好简单试了一下,OK。每次修改完代码,执行yarn test:unit,一切完美!
  然而,当测试到better-sqlite3这个模块的时候问题来了:提示该模块使用NODE_MODULE_80编译的,当前NODE要求使用NODE_MODULE 88,请重新编译。
  按照提示运行npm rebuild,,问题解决啦!!!
  然后代码在集成到ELECTRON中运行时,一大波问题来了:
  1: string.replaceAll()不是函数。
  哪尼?测试是好的呀,不信运行给你看:yarn test:unit,,,一切正常,,,
  好吧,我换个API,string.replace(regexp)总可以吧?
  2: 使用了better-sqlite3库,运行提示:该库是使用NODE_MODULE_88编译的,当前node要求NODE_MODULE_80,请npm rebuild。哪尼?前面不是要求88的嘛!!
  好吧,重新yarn install,重新编译
  3: axios居然提示不支持stream?!!!
  google半天,强行把adapter换成http,然后再crack一把,axios的package.json把browser节点删除,,,终于好了。
  勉强对付了几天,发现不是办法啊,这样测试下来的结果太不可靠了,测试时用npm rebuild,集成时又要yarn install,来回折腾 太累了,,,于是认真研究对策。
  首先想到的是更新ELECTRON或者node的版本,以求版本号一致。我的node是最新版15.3,vue cli生成的框架使用了electron 9.0,先升级到11.0,发现版本号变成了85,跟node的88还是差太远。然后去node网站,半天没有找到 node-module-version 85的,,,甚至,都没有80的。
  所以,只能想办法让jest使用electron来运行了-它默认使用node。查看jest文档,testEnvironment可以使用JSDOM,NODE,或者自定义。自定义需要写接口,比较麻烦,于是再次google,只找到了一个jest-electron,7个月前更新的,就它吧!
  然鹅,安装以后一直运行不起来啊,提示:can't find property of runInThisContext,,,一直折腾一下午,在官方issue里面看到有人建议升级,说现在jest版本号都26了,jest-electron版本号还是24,打开package一看,果然是24啊!抱着试试看的态度,把jest版本号改成24.0,然后重新yarn install安装,哈哈,可以运行啦!!
  最后只有一个问题了,就是测试用例里面和代码里面所有的console.log()都没有输出了。Google有人说是因为输出到render进程的原因,然而试了所有的办法都不成功。最后怀疑是不是jest-electron把stdout修改了,在js源文件里面查找,果然找到了,怎么办呢?打开调试开关—命令行set node-debug=1,或者写入.env文件里。再次测试时,devtools窗口自动出现,所有log都在那里了。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号