精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

卓越工程實踐之—前端高質量單測

原創 精選
數據庫 其他數據庫
在我們的項目中,用issue來管理用戶需求。用戶每發現一個問題都可以到我們指定倉庫中去提issue,新增的issue觸發機器人在釘釘群里艾特對應修改人,修復后機器人通知創建人。

作者 | 范喆(六瓶)

高單測等于高質量?

筆者負責的npm包是 ICBU信天翁低代碼平臺渲染引擎,160+應用 600+頁面基于該引擎開發,內網日npm下載 1K+。經過不懈努力(CV),終于把單測提到了95%。

然而,雖然在覆蓋率上獲得了一些數據的改變,但作為開發者,想要的并不是數據上的完美,而是它真的完美(沒BUG)。作為一個高頻引用的底層庫,改動一行代碼都可以影響到用戶意想不到的bug。

高單測覆蓋率不能避免改動引發,小的改動引發就可能帶來大的線上問題。

寫好單測

issue=單測

每一個issue都有它命中注定的一個單測。

在我們的項目中,用issue來管理用戶需求。用戶每發現一個問題都可以到我們指定倉庫中去提issue,新增的issue觸發機器人在釘釘群里艾特對應修改人,修復后機器人通知創建人。

圖片

在軟件工程中,對單元測試的描述是“針對每一個單元的測試,以確保每個模塊能正常工作為目標”。在我們行覆蓋率和分支覆蓋率都很高的情況下,還需要有新的機制保證模塊更穩定。除去那些框架還沒探索到的業務場景,怎么樣保證現在用戶的一定沒有問題?于是有了issue即單測。在現在的issue運作機制下,保證每一個單側都有對應的issue。在倉庫中新增了腳本tnpm run create-issue。


// package.json
"scripts": {
"create-issue": "node ./script/issue_dev/createIssueTem.js",
}

// createIssueTem.js
/**
* 快速創建issue示例
*/
const path = require('path');
const execSync = require('child_process').execSync;
const args = process.argv.slice(2);

const issueID = args[0];

if (!issueID) {
console.error('需要輸入issue id才能運行');
process.exit();
}

const demoTarget = path.resolve(__dirname, `../../demo/issue_${issueID}`);
const demoSrc = path.resolve(__dirname, `../template/demo/base.md`);

const testTarget = path.resolve(__dirname, `../../test/issues-cov/${issueID}`);
const testSrc = path.resolve(__dirname, `../template/test/*`);
const specTarget = 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}成功`);

在發布前把對應的demo做刪除。


// prebuild
// 構建前刪除issue的demo
const fs = require('fs');
const path = require('path');
const ENV = process.env.BUILD_ENV == 'cloud';

function removeDir(dir) {
let files = fs.readdirSync(dir);
for (var i = 0; i < files.length; i++) {
let newPath = path.join(dir, files[i]);
let stat = fs.statSync(newPath);
if (stat.isDirectory()) {
//如果是文件夾就遞歸下去
removeDir(newPath);
} else {
//刪除文件
fs.unlinkSync(newPath);
}
}
fs.rmdirSync(dir); //如果文件夾是空的,就將自己刪除掉
}

fs.readdir('./demo', (err, path) => {
if (err) {
console.log(err);
}
path.forEach((pathItem) => {
if (pathItem.includes('issue') && ENV) {
removeDir(`./demo/${pathItem}`);
console.log(`刪除${pathItem}`);
}
});
});

當我們運行tnpm run create-issue 123456,幫我們創建對應issue 123456的單測+demo,復用同一個template內容,可以在瀏覽器端看到demo,也可以在vs code中直接編寫單測內容。

圖片

在demo中,可以直接點擊gitlab鏈接跳轉到對應issue。

圖片

這里拿一個簡單的issue做演示:

圖片

對應的原子單測。


describe('116193', () => {
it('should work', async () => {
const wrapper = mount(<App />);
await sleep(10);
wrapper.mount();
expect(Object.keys(A)).toMatchSnapshot();
expect(A.hasApplied).toBeDefined();
return wrapper.unmount();
});
});

單測非常簡單,雖然只有兩句expect,但這兩句是只為這個issue存在,強行cp。

issue唯一單測覆蓋,保證0改動引發。

在業界一些優秀的開源框架也是有同樣的issue即單測的案例,比如mobx。

圖片

單測=文檔

原子類單測可以極大程度保證代碼穩定性,組件類可以描述開發者期望的用法。單測即文檔。

圖片

閉環沉淀反哺

除此之外,issue的Milestone代表對應npm版本:


// changelog
# 1.24.0
1. 【FEAT】列表過濾提供類似表單的校驗模式 #115827(cover by test)
2. 【FEAT】model內置屬性應該不可枚舉 #116193(cover by test)
3. 【FEAT】期望提供ref注解,方便平臺側做區分 #116364
4. 【Bug】watch 在正則的模式下,調用 silent validate 會導致 autoValidate 失效 #116242(cover by test)

issue的最好歸宿就是cover by test。釘釘 -> issue -> npm changelog 相互對應,做到每個單測可溯源。

圖片

筆者負責的框架已經推行了一年,再回顧一下。值得思考的是,重頭設計一次架構,是否能完美的解決現在的這些issue。

這些issue和單測都是走過的腳印,現在我們已經積累單測170+, 其中60+ issue原子類單測。不能保證0BUG。但可預見的是讓用戶放心用,不會有改動引發。單測是質量的守門神,幫助框架做好用戶預期,一步步更穩健的前行。

最后

寫單測最好的時間是項目開始前,其次是現在。

責任編輯:武曉燕 來源: 阿里開發者
相關推薦

2023-07-06 14:51:30

開發高質量軟件

2022-12-02 10:38:50

機器學習開發工程項目

2011-05-31 13:43:46

外鏈

2017-07-14 09:54:47

代碼函數程序

2021-08-08 14:26:24

SQL數據庫開發

2023-03-09 15:05:46

HTMLWeb 開發SEO

2023-12-08 07:59:41

對象設計設計模式軟件設計

2025-07-23 04:00:00

2011-06-24 14:59:41

外鏈

2023-10-15 12:07:09

2011-03-04 10:11:09

JavascriptAPI

2011-07-20 15:26:52

C++

2015-08-19 08:54:23

Android開發框架

2012-09-13 10:44:18

Python代碼

2013-12-03 09:34:26

iOS應用開發實踐高質量Objectiv

2020-04-02 15:45:24

JavaScript開發 模塊

2020-03-02 09:26:16

JavaScript程序員JSON

2022-12-23 19:22:47

前端單測
點贊
收藏

51CTO技術棧公眾號

欧美a级免费视频| 81精品国产乱码久久久久久| 久久精品影视大全| 亚洲丝袜精品| 26uuu久久天堂性欧美| 国产精品久久久久秋霞鲁丝| 欧美日韩中文字幕在线观看| 日韩极品在线| 成人婷婷网色偷偷亚洲男人的天堂| 在线成人亚洲| 亚洲欧美日韩一区在线| 99中文字幕在线| 国模冰冰炮一区二区| 中文字幕在线观看不卡视频| 国产一区二区三区高清| 一级特黄aa大片| 一区二区三区国产盗摄| 久久精品国产亚洲7777| 国产国语性生话播放| 电影91久久久| 欧美亚洲国产bt| 人妻久久久一区二区三区| 欧美性videos| 久久午夜色播影院免费高清| 成人国产一区二区| 国产精品怡红院| 日本不卡视频在线| 琪琪第一精品导航| 精品一级少妇久久久久久久| 欧美电影免费播放| 国产亚洲日本欧美韩国| 99久久国产精| 国产成人一二片| 日韩欧美资源站| 天天干天天色天天干| 婷婷综合六月| 国产a久久精品一区二区三区| 久久一日本道色综合久久| 久久精品国产2020观看福利| 西西444www无码大胆| 老司机精品在线| 精品国产区一区| 亚洲av无一区二区三区久久| 99久热在线精品视频观看| 欧美一a一片一级一片| 亚洲国产精品久久久久爰色欲| av中文字幕在线看| 一区二区三区不卡视频| 六月婷婷激情网| www在线观看播放免费视频日本| 国产精品免费aⅴ片在线观看| 欧美一区二区福利| 国产h在线观看| 日本一区二区三区视频视频| 日本一区二区在线视频| 国产露出视频在线观看| 国产黄色精品视频| 成人av男人的天堂| 日本xxxxxwwwww| 91在线视频网址| 久久66热这里只有精品| 蜜桃成人在线视频| 国产婷婷精品av在线| 日本在线视频不卡| 尤物网在线观看| 国产调教在线| 99亚偷拍自图区亚洲| 国产精品国产精品国产专区蜜臀ah | 亚洲精品第三页| 国产成年精品| 亚洲国产高清福利视频| 亚洲蜜桃精久久久久久久久久久久| 欧美日韩夜夜| 在线看日韩欧美| 加勒比婷婷色综合久久| 欧美日韩p片| 97在线视频免费观看| 中文字幕免费在线观看视频| 日韩av一区二区在线影视| 国产啪精品视频网站| 国产露脸无套对白在线播放| 高清不卡在线观看| 久久久亚洲综合网站| 高清毛片在线看| 亚洲欧美一区二区不卡| 精品视频在线观看一区| 日韩高清成人| 欧美大黄免费观看| 国产中年熟女高潮大集合| 天天综合精品| 2019中文字幕全在线观看| 国产乡下妇女三片| 国产91露脸合集magnet| 欧美日韩国产综合在线| 黄网站视频在线观看| 黄色一区二区三区| 激情文学亚洲色图| 天海翼亚洲一区二区三区| 日韩在线视频网站| 日本免费观看视| 久久精品99国产精品| 中文成人av在线| 98精品国产自产在线观看 | 国产欧美成人| 国产欧美精品一区二区三区介绍| 韩国av免费在线观看| 中文字幕成人网| 鲁一鲁一鲁一鲁一澡| **国产精品| 一色桃子一区二区| 在线观看精品国产| 国产精品1区2区3区在线观看| 欧美日韩精品久久| √8天堂资源地址中文在线| 欧美群妇大交群的观看方式| 人妻无码一区二区三区| 国产一区日韩欧美| 成人精品在线观看| av在线播放免费| 欧美日韩精品在线播放| 佐佐木明希电影| 四季av在线一区二区三区 | 亚洲天堂av片| 国产成人8x视频一区二区| 亚洲精品国产系列| 欧美一区久久久| 日韩精品中文字幕在线播放| 久久黄色免费视频| 精品无人码麻豆乱码1区2区| 青青草成人网| 黄色污网站在线观看| 日韩欧美国产一区在线观看| 手机av在线不卡| 老司机亚洲精品| 久久精精品视频| 91超碰国产在线| 精品国产sm最大网站免费看| 看片网站在线观看| 国产一区二区免费看| 一区二区三区在线视频看| 精品3atv在线视频| 亚洲一区二区久久久| av黄色在线播放| ww久久中文字幕| 波多野结衣家庭教师在线播放| www.爱久久| 欧美激情欧美激情在线五月| 精品国产亚洲av麻豆| 亚洲视频图片小说| 在线免费黄色小视频| 国产成人自拍偷拍| 亚州综合一区| 欧美在线观看一区二区三区| 日本精品一区二区在线观看| 香蕉久久一区二区不卡无毒影院| 天堂www中文在线资源| 亚洲毛片一区| 欧美日韩亚洲在线| 日韩欧美2区| 日韩视频免费观看| 亚洲精品字幕在线| 亚洲第一主播视频| 国产精品三级在线观看无码| 性欧美精品高清| 视频在线精品一区| 91麻豆精品一二三区在线| 免费91在线视频| 亚洲经典一区二区三区| 精品久久久久久久久久久| 女人被狂躁c到高潮| 日韩专区欧美专区| 在线视频亚洲自拍| 77导航福利在线| 国产精品极品在线观看| 中国人与牲禽动交精品| 97成人免费视频| 亚洲午夜日本在线观看| 一区二区三区少妇| 欧美bbbbb| 欧美a级黄色大片| 美腿丝袜亚洲图片| 国产精品aaaa| 中文字幕伦理免费在线视频| 亚洲精美色品网站| 亚洲图片欧美在线| 亚洲一区二区三区四区的 | 欧美极品xxx| 婷婷激情小说网| 亚洲综合国产激情另类一区| 一区二区三区三区在线| 成人av资源网址| 国产精品高精视频免费| 男人天堂亚洲天堂| 亚洲午夜久久久影院| 国产视频在线观看免费| 日韩欧美在线视频观看| 欧美成人777| 久久―日本道色综合久久| 永久av免费在线观看| 久久综合九色| 日韩黄色短视频| 93在线视频精品免费观看| 高清不卡一区二区三区| 精品网站在线| 97人人做人人爱| 精精国产xxxx视频在线| 亚洲新声在线观看| 人人妻人人澡人人爽精品日本| 欧美日韩视频第一区| 久久草视频在线| 亚洲免费色视频| 亚洲精品91在线| 91小视频在线| 日本人妻一区二区三区| 麻豆91在线播放免费| 欧美精品一区免费| 国内自拍一区| 美女在线免费视频| 成人aaaa| 你懂的视频在线一区二区| 99久久免费精品国产72精品九九| 91久久久亚洲精品| 免费在线成人激情电影| 日本在线观看天堂男亚洲| 2018av在线| 欧美华人在线视频| 成年人黄视频在线观看| 日韩在线视频观看| av在线免费播放网站| 亚洲片av在线| 亚洲美女性生活| 91精品国产91久久久久久一区二区| 青青草视频在线观看免费| 精品高清一区二区三区| 国产精品6666| 亚洲午夜久久久久久久久久久 | 成人黄色在线播放| 国产成人77亚洲精品www| 国产精品av电影| 写真福利精品福利在线观看| 日本久久久久久久久| 在线毛片观看| 国产69精品久久久久久| 女厕盗摄一区二区三区| 久久久伊人日本| av资源网在线播放| 78m国产成人精品视频| 国产精品论坛| 国产69精品久久久久久| 一区二区三区短视频| 日本最新高清不卡中文字幕| 午夜精品久久久久久久久久蜜桃| 欧亚精品中文字幕| 亚洲精品粉嫩美女一区| 国产精品久久激情| 欧美黄页免费| 91亚洲精品在线| aiss精品大尺度系列| 九色视频成人porny| 日本欧美三级| 日本高清不卡三区| 日韩大片在线| 久久久成人精品一区二区三区| 国产精品久久免费| 秋霞电影网一区二区| 亚洲精品一二三四五区| 久99久精品视频免费观看| 熟妇女人妻丰满少妇中文字幕| 高清不卡一区二区在线| 99久久人妻精品免费二区| 久久麻豆一区二区| 国产精品麻豆免费版现看视频| 亚洲欧洲制服丝袜| 日韩成人免费在线观看| 在线观看免费一区| 国产精品天天操| 亚洲黄色在线看| yw在线观看| 欧美精品手机在线| 忘忧草在线日韩www影院| 国产精品丝袜视频| 亚洲天堂av资源在线观看| 久久精品国产综合精品| 日韩免费一区| 霍思燕三级露全乳照| 日韩不卡一区二区三区| 伊人av在线播放| 国产亚洲综合在线| 18岁成人毛片| 色香蕉成人二区免费| 97人妻精品一区二区三区| 亚洲第一网中文字幕| 成黄免费在线| 久久久免费高清电视剧观看| 欧美与亚洲与日本直播| 成人欧美一区二区三区视频xxx| 免费视频国产一区| 好吊色视频988gao在线观看| 久久av一区| 中文字幕永久免费| 国产精品免费人成网站| 国产成人免费观看视频| 欧美精品三级在线观看| 色视频在线观看| 欧美第一黄网免费网站| 国产一区二区精品调教| 国产精品高清一区二区三区| 93在线视频精品免费观看| 日韩有码免费视频| 成人h版在线观看| 亚洲色偷偷综合亚洲av伊人| 一本色道久久加勒比精品 | 久久99久久久久| 无码人妻精品一区二区三应用大全| 亚洲视频在线一区| 中文字幕在线观看免费| 精品夜色国产国偷在线| 丝袜中文在线| 91社区国产高清| 日韩欧美一区二区三区在线视频 | 国产一区二三区| 一级黄色录像毛片| 色吊一区二区三区| 婷婷伊人综合中文字幕| 欧美日韩国产成人高清视频| 销魂美女一区二区| 日韩精品乱码免费| 久久综合在线观看| 国产精品亲子乱子伦xxxx裸| 中文字幕高清在线免费播放| 亚洲第一国产精品| 日本中文字幕中出在线| 成人欧美一区二区三区黑人孕妇| 精品72久久久久中文字幕| ww国产内射精品后入国产| 成人av电影在线观看| 久久精品国产亚洲av高清色欲| 日韩一级片在线观看| 男人资源在线播放| 成人免费激情视频| 91精品一区国产高清在线gif | 在线电影欧美日韩一区二区私密| 亚洲欧美一区二区三区| 久久福利电影| 欧美亚洲三级| xxx在线播放| 欧美午夜精品一区| 99视频在线观看地址| 国产精品一区二区三区毛片淫片 | 久久久久狠狠高潮亚洲精品| 99re热视频这里只精品| 国产成人无码一区二区三区在线| 亚洲国产一区二区三区四区| 天堂在线中文网官网| 欧美日韩国产精品一区二区| 视频一区在线视频| 自拍偷拍你懂的| 91精品国产乱码| 免费在线观看av电影| 国产在线精品日韩| 久久久久国内| 中国1级黄色片| 欧美一二三在线| av伦理在线| 欧美午夜精品久久久久免费视| 日韩中文欧美在线| 成人信息集中地| 日韩一区二区三| 国产在线精彩视频| 视频在线一区二区三区| 精彩视频一区二区三区| 久久这里只有精品免费| 亚洲精品天天看| 亚洲成人精品综合在线| 久久亚洲国产成人精品无码区 | 日韩欧美国产成人一区二区| av白虎一区| 日本精品二区| 国产一区视频在线看| 五月天婷婷丁香| 国产亚洲视频在线| 免费观看亚洲天堂| 国产亚洲欧美在线视频| 国产精品久久网站| 少妇人妻精品一区二区三区| 国产精品极品尤物在线观看| 欧美99在线视频观看| 中文字字幕码一二三区| 欧美精选在线播放| 蜜桃av在线| 天天做天天爱天天高潮| 9色porny自拍视频一区二区| 中文字幕+乱码+中文乱码www| 欧美日韩国产探花| 黄色一级大片免费| 久久久精品综合| 亚洲精品97久久中文字幕无码| 国产精品video| 欧美午夜电影在线观看| 日本美女xxx|