摘要:測(cè)試驅(qū)動(dòng)開發(fā)是一種使用自動(dòng)化單元測(cè)試來推動(dòng)軟件設(shè)計(jì)并強(qiáng)制依賴關(guān)系解耦的技術(shù)。使用這種做法的結(jié)果是一套全面的單元測(cè)試,可隨時(shí)運(yùn)行,以提供軟件可以正常工作的反饋。
一、幾種概念(稍微了解一下) ATDD: Acceptance Test Driven Development(驗(yàn)收測(cè)試驅(qū)動(dòng)開發(fā))
這是一種在編碼開始之前將客戶帶入測(cè)試設(shè)計(jì)過程的技術(shù)。它也是一個(gè)協(xié)作實(shí)踐,用戶,測(cè)試人員和開發(fā)人員定義了自動(dòng)驗(yàn)收標(biāo)準(zhǔn)。 ATDD有助于確保所有項(xiàng)目成員準(zhǔn)確理解需要完成和實(shí)施的內(nèi)容。如果系統(tǒng)未通過測(cè)試可提供快速反饋,說明未滿足要求。驗(yàn)收測(cè)試以業(yè)務(wù)領(lǐng)域術(shù)語進(jìn)行指定。每個(gè)功能都必須提供真實(shí)且可衡量的業(yè)務(wù)價(jià)值,事實(shí)上,如果您的功能沒有追溯至至少一個(gè)業(yè)務(wù)目標(biāo),那么您應(yīng)該想知道為什么您要首先實(shí)施它。
TDD:Test-driven development (測(cè)試驅(qū)動(dòng)開發(fā))是一種使用自動(dòng)化單元測(cè)試來推動(dòng)軟件設(shè)計(jì)并強(qiáng)制依賴關(guān)系解耦的技術(shù)。使用這種做法的結(jié)果是一套全面的單元測(cè)試,可隨時(shí)運(yùn)行,以提供軟件可以正常工作的反饋。TDD重點(diǎn)是培養(yǎng)整個(gè)研發(fā)過程的節(jié)奏感,就像跳踢踏舞一樣,“ti-ta-ti”。在編寫真正實(shí)現(xiàn)功能的代碼之前先編寫測(cè)試,每次測(cè)試之后,重構(gòu)完成,然后再次執(zhí)行相同或類似的測(cè)試。該過程根據(jù)需要重復(fù)多次,直到每個(gè)單元根據(jù)所需的規(guī)格運(yùn)行。
BDD:Behavior-Driven Development (行為驅(qū)動(dòng)開發(fā))BDD將TDD的一般技術(shù)和原理與領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)的想法相結(jié)合。 BDD是一個(gè)設(shè)計(jì)活動(dòng),您可以根據(jù)預(yù)期行為逐步構(gòu)建功能塊。BDD的重點(diǎn)是軟件開發(fā)過程中使用的語言和交互。行為驅(qū)動(dòng)的開發(fā)人員使用他們的母語與領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的語言相結(jié)合來描述他們的代碼的目的和好處。使用BDD的團(tuán)隊(duì)?wèi)?yīng)該能夠以用戶故事的形式提供大量的“功能文檔”,并增加可執(zhí)行場(chǎng)景或示例。 BDD通常有助于領(lǐng)域?qū)<依斫鈱?shí)現(xiàn)而不是暴露代碼級(jí)別測(cè)試。它通常以GWT格式定義:GIVEN WHEN&THEN。
二、NodeJs中的Assert模塊 - 斷言模塊介紹:assert 模塊提供了一組簡(jiǎn)單的斷言測(cè)試,可用于測(cè)試不變量。存在嚴(yán)格模式(strict)和遺留模式(legacy),但建議僅使用嚴(yán)格模式。簡(jiǎn)單嘗試
(當(dāng)然要先安裝好node啦,安裝node教程網(wǎng)上好像已經(jīng)有很多了,我這里就不寫了?。?/p>
var assert = require("assert"); function add (a, b){ return a + b; } assert.equal(6, add(3, 3), "預(yù)期 3 + 3 等于 6")
當(dāng)調(diào)用add函數(shù)并且執(zhí)行結(jié)果為6,執(zhí)行不會(huì)報(bào)錯(cuò),我們將代碼改一下。如下:
// assert.equal(6, add(3, 3), "預(yù)期 3 + 3 等于 6") assert.equal(5, add(3, 3), "預(yù)期 3 + 3 等于 6")
我們可以看到拋出了一個(gè)錯(cuò)誤,錯(cuò)誤信息是預(yù)期 3 + 3 等于 6。
這是nodejs的assert模塊簡(jiǎn)單嘗試,更多詳細(xì)內(nèi)容可猛戳Assert模塊
PS: 還有很多斷言庫比如 should.js、chai等等
Mocha是一個(gè)在Node.js和瀏覽器上運(yùn)行的功能豐富的JavaScript測(cè)試框架,使異步測(cè)試變得簡(jiǎn)單而有趣。 Mocha測(cè)試以串行方式運(yùn)行,允許靈活準(zhǔn)確的報(bào)告,同時(shí)將未捕獲的異常映射到正確的測(cè)試用例。Mocha初體驗(yàn)
使用npm全局安裝:
$ npm install --global mocha
也可以作為項(xiàng)目的依賴進(jìn)行安裝:
$ npm install --save-dev mocha
使用mocha -v可以查看版本號(hào)
新建一個(gè)test.js文件,輸入如下內(nèi)容:
var assert = require("assert") describe("Array", function() { describe("#indexOf()", function() { it("should return -1 when the value is not present", function() { assert.equal(-1, [1, 2, 3].indexOf(4)) }) }) })
可以在終端使用mocha test.js進(jìn)行測(cè)試,輸出結(jié)果如下:
我們將代碼修改一下:
// assert.equal(-1, [1, 2, 3].indexOf(4)) assert.equal(-1, [1, 2, 3].indexOf(3))
給出了failing結(jié)果,測(cè)試不通過,并且給出了1) should return -1 when the value is not present的錯(cuò)誤信息,準(zhǔn)確的告訴我們是哪里沒有通過測(cè)試!
PS: 單元測(cè)試框架還有 jest、jasmine等等
一個(gè)測(cè)試工具,能讓你的代碼在瀏覽器環(huán)境下測(cè)試。需要它的原因在于,你的代碼可能是設(shè)計(jì)在瀏覽器端執(zhí)行的,在node環(huán)境下測(cè)試可能有些bug暴露不出來;另外,瀏覽器有兼容問題,karma提供了手段讓你的代碼自動(dòng)在多個(gè)瀏覽器(chrome,firefox,ie等)環(huán)境下運(yùn)行。Karma初體驗(yàn)
全局安裝 karma
$ npm install -g karma-cli
因?yàn)槲乙呀?jīng)全局安裝過了,這里就直接先安裝依賴npm i,然后執(zhí)行karma init
1. Which testing framework do you want to use ? (mocha) 2. Do you want to use Require.js ? (no) 3. Do you want to capture any browsers automatically ? (Chrome) 4. What is the location of your source and test files ? (https://cdn.bootcss.com/jquery/2.2.4/jquery.js, node_modules/should/should.js, test/**.js) 5. Should any of the files included by the previous patterns be excluded ? () 6. Do you want Karma to watch all the files and run the tests on change ? (yes)
然后執(zhí)行karma start效果如下:
目前新興的開源持續(xù)集成構(gòu)建項(xiàng)目,它與jenkins,GO的很明顯的特別在于采用yaml格式,簡(jiǎn)潔清新獨(dú)樹一幟。嘗試給項(xiàng)目集成Travis CI
猛戳Travis CI打開網(wǎng)站,然后可以選擇使用github賬號(hào)登錄如下圖:
這時(shí)候我們需要在項(xiàng)目根目錄添加.travis.yml文件,大致內(nèi)容如下(具體需要什么請(qǐng)參考官方文檔):
language: node_js # nodejs版本 node_js: - "8" # Travis-CI Caching cache: directories: - node_modules # S: Build Lifecycle install: - npm install - export CHROME_BIN=chromium-browser - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start before_script: # 無其他依賴項(xiàng)所以執(zhí)行npm run build 構(gòu)建就行了 script: - npm test
然后我們將代碼提交,我們會(huì)看見Travis CI自動(dòng)開始構(gòu)建
我們甚至可以看到詳細(xì)信息
以及執(zhí)行結(jié)果
然后發(fā)現(xiàn)執(zhí)行以后,并沒有自動(dòng)結(jié)束
我們只需要修改一下配置,找到karma.conf.js:
將singleRun: false改為singleRun: true,然后將代碼再提交一次,我們?cè)倏磮?zhí)行結(jié)果:
喜大普奔,通過測(cè)試?yán)?,嘿嘿嘿?。。?br>其實(shí)在github也是可以看到測(cè)試的結(jié)果啦:
還有很多高級(jí)玩法,大家可以去看一下文檔!同樣可以根據(jù)自身愛好集成其他的斷言庫和測(cè)試框架進(jìn)行測(cè)試!
小廣告我自己運(yùn)營的公眾號(hào),記錄我自己的成長(zhǎng)!
公眾號(hào):前端曰
公眾號(hào)ID:js-say
ps:是(yue)不是(ri)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/104197.html
摘要:初級(jí)階段已經(jīng)完結(jié),之后會(huì)針對(duì)之前提到過的內(nèi)容,對(duì)實(shí)際場(chǎng)景進(jìn)行分享。我們要講什么聊天功能中的發(fā)送框的實(shí)現(xiàn)及一些常規(guī)操作的實(shí)現(xiàn)。以下接口都從繼承其方法和屬性返回一個(gè)包含該節(jié)點(diǎn)名字的。是獲取剪貼板對(duì)象。所以不能直接人為替換剪貼板內(nèi)容達(dá)到目的。 前端最基礎(chǔ)的就是 HTML+CSS+Javascript。掌握了這三門技術(shù)就算入門,但也僅僅是入門,現(xiàn)在前端開發(fā)的定義已經(jīng)遠(yuǎn)遠(yuǎn)不止這些。前端小課堂(H...
摘要:初級(jí)階段已經(jīng)完結(jié),之后會(huì)針對(duì)之前提到過的內(nèi)容,對(duì)實(shí)際場(chǎng)景進(jìn)行分享。我們要講什么聊天功能中的發(fā)送框的實(shí)現(xiàn)及一些常規(guī)操作的實(shí)現(xiàn)。以下接口都從繼承其方法和屬性返回一個(gè)包含該節(jié)點(diǎn)名字的。是獲取剪貼板對(duì)象。所以不能直接人為替換剪貼板內(nèi)容達(dá)到目的。 前端最基礎(chǔ)的就是 HTML+CSS+Javascript。掌握了這三門技術(shù)就算入門,但也僅僅是入門,現(xiàn)在前端開發(fā)的定義已經(jīng)遠(yuǎn)遠(yuǎn)不止這些。前端小課堂(H...
摘要:初級(jí)階段已經(jīng)完結(jié),之后會(huì)針對(duì)之前提到過的內(nèi)容,對(duì)實(shí)際場(chǎng)景進(jìn)行分享。我們要講什么聊天功能中的發(fā)送框的實(shí)現(xiàn)及一些常規(guī)操作的實(shí)現(xiàn)。以下接口都從繼承其方法和屬性返回一個(gè)包含該節(jié)點(diǎn)名字的。是獲取剪貼板對(duì)象。所以不能直接人為替換剪貼板內(nèi)容達(dá)到目的。 前端最基礎(chǔ)的就是 HTML+CSS+Javascript。掌握了這三門技術(shù)就算入門,但也僅僅是入門,現(xiàn)在前端開發(fā)的定義已經(jīng)遠(yuǎn)遠(yuǎn)不止這些。前端小課堂(H...
摘要:再來做個(gè)練習(xí),如果我們想要黃色,那就是把紅色光跟綠色光混合起來,所以我們就把紅色光跟綠色光像這樣開到最大,你就能夠看到黃色了。 網(wǎng)頁使用到的色彩標(biāo)示方法中,從古早時(shí)期大家都在用的16進(jìn)位碼(#000000)、RGB色值標(biāo)示、HSL色彩標(biāo)示,其中網(wǎng)頁設(shè)計(jì)師最常使用的16進(jìn)位色碼標(biāo)示法,而16進(jìn)位碼又是如何計(jì)算色彩的呢?有沒有辦法直接腦袋就把色彩算出來?HSL色彩該如何運(yùn)用與記憶?有沒有什...
閱讀 1024·2023-04-25 23:55
閱讀 2735·2023-04-25 14:13
閱讀 3318·2019-08-26 13:47
閱讀 2997·2019-08-23 18:16
閱讀 651·2019-08-23 17:20
閱讀 3249·2019-08-23 16:55
閱讀 3188·2019-08-22 15:39
閱讀 3222·2019-08-20 18:10