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