作者|范哲(六瓶)单测高就等于质量高?笔者负责的npm包是ICBU信天翁低代码平台渲染引擎。基于该引擎开发了160+应用,600+页面,内网npm日下载量1K+。经过不懈的努力(CV),终于把单考提高到了95%。不过,虽然在覆盖范围内获得了一些数据变化,但是作为开发者,想要的不是完美的数据,而是真正的完美(无BUG)。作为一个被频繁引用的底层库,更改一行代码可能会影响用户意想不到的错误。高单测覆盖率避免不了变化,小的变化可能导致线上大问题。写单测issue=singletest每个issue都有自己命中注定的单测。在我们的项目中,问题用于管理用户需求。用户每次发现问题,都可以到我们指定的仓库提出问题。新增问题触发机器人在钉钉群中对应编辑,修复后机器人通知创建者。在软件工程中,单元测试的描述是“对每个单元进行一次测试,以确保每个模块都能正常工作”。在我们的线路覆盖率和分支覆盖率都很高的情况下,需要一种新的机制来保证模块更加稳定。除了那些框架还没有探索的业务场景,如何保证当前用户一定没有问题?那么就有一个问题,就是单测。在目前的issue运行机制下,保证每一方都有对应的issue。将脚本tnpmruncreate-issue添加到存储库。//package.json"scripts":{"create-issue":"node./script/issue_dev/createIssueTem.js",}//createIssueTem.js/***快速创建问题示例*/constpath=require('path');constexecSync=require('child_process').execSync;constargs=process.argv.slice(2);constissueID=args[0];if(!issueID){console.error('需要输入issueid才能运行');process.exit();}constdemoTarget=path.resolve(__dirname,`../../demo/issue_${issueID}`);constdemoSrc=path.resolve(__dirname,`../template/demo/base.md`);consttestTarget=path.resolve(__dirname,`../../test/issues-cov/${issueID}`);consttestSrc=path.resolve(__dirname,`../template/test/*`);constspecTarget=path.resolve(__dirname,`../../test/issues-cov/${issueID}/app.spec.tsx`);execSync(`mkdir${demoTarget}`);execSync(`cp${demoSrc}${demoTarget}/`);execSync(`sed-i''s/issueID/${issueID}/g'${demoTarget}/base.md`);execSync(`mkdir${testTarget}`);execSync(`cp${testSrc}${testTarget}`);execSync(`sed-i'''s/issueID/${issueID}/g'${specTarget}`);console.log(`创建${issueID}成功`);deletethecorrespondingdemobeforepublishing//prebuild//deletethedemoconstoftheissuebeforebuildingfs=require('fs');constpath=require('path');constENV=process.env.BUILD_ENV=='云';functionremoveDir(dir){letfiles=fs.readdirSync(dir);for(vari=0;i
