一:測試是什麼
爲檢測特定的目標是否符合標準而採用專用的工具或者方法進行驗證,並最終得出特定的結果。html
二:單元測試的意義
對於如今的前端工程,一個標準完整的項目,測試是很是有必要的。不少時候咱們只是完成了項目而忽略了項目測試的部分,測試的意義主要在於下面幾點:前端
- TDD(測試驅動開發) 被證實是有效的軟件編寫原則,它能覆蓋更多的功能接口。
- 快速反饋你的功能輸出,驗證你的想法。
- 保證代碼重構的安全性,沒有一成不變的代碼,測試用例能給你多變的代碼結構一個定心丸。
- 易於測試的代碼,說明是一個好的設計。作單元測試以前,確定要實例化一個東西,假如這個東西有不少依賴的話,這個測試構造過程將會很是耗時,會影響你的測試效率,怎麼辦呢?要依賴分離,一個類儘可能保證功能單一,好比視圖與功能分離,這樣的話,你的代碼也便於維護和理解。
三:爲何要單元測試
- 首先是一個前端單元測試的根本性起因:JavaScript 是動態語言,缺乏類型檢查,編譯期間沒法定位到錯誤; JavaScript 宿主的兼容性問題。好比 DOM 操做在不一樣瀏覽器上的表現。
- 正確性:測試能夠驗證代碼的正確性,在上線前作到內心有底。
- 自動化:固然手工也能夠測試,經過console能夠打印出內部信息,可是這是一次性的事情,下次測試還須要從頭來過,效率不能獲得保證。經過編寫測試用例,能夠作到一次編寫,屢次運行。
- 解釋性:測試用例用於測試接口、模塊的重要性,那麼在測試用例中就會涉及如何使用這些API。其餘開發人員若是要使用這些API,那閱讀測試用例是一種很好地途徑,有時比文檔說明更清晰。
- 驅動開發,指導設計:代碼被測試的前提是代碼自己的可測試性,那麼要保證代碼的可測試性,就須要在開發中注意API的設計,TDD將測試前移就是起到這麼一個做用。
- 保證重構:互聯網行業產品迭代速度很快,迭代後必然存在代碼重構的過程,那怎麼才能保證重構後代碼的質量呢?有測試用例作後盾,就能夠大膽的進行重構。
四:經常使用的單元測試方法論
- TDD: Test-driven development (測試驅動開發),過程以下:
- 需求分析,思考實現。考慮如何「使用」產品代碼,是一個實例方法仍是一個類方法,是從構造函數傳參仍是從方法調用傳參,方法的命名,返回值等。這時其實就是在作設計,並且設計以代碼來體現。此時測試爲紅
- 實現代碼讓測試爲」綠燈「
- 重構,而後重複測試
- 最終符合全部要求即:
- 每一個概念都被清晰的表達
- 代碼中無自我重複
- 沒有多餘的東西
- 經過測試
- BDD: Behavior-Driven Development (行爲驅動開發) ,過程以下:
- 從業務的角度定義具體的,以及可衡量的目標
- 找到一種能夠達到設定目標的、對業務最重要的那些功能的方法
- 而後像故事同樣描述出一個個具體可執行的行爲。其描述方法基於一些通用詞彙,這些詞彙具備準確無誤的表達能力和一致的含義。例如,expect, should, assert
- 尋找合適語言及方法,對行爲進行實現
-
測試人員檢驗產品運行結果是否符合預期行爲。最大程度的交付出符合用戶指望的產品,避免表達不一致帶來的問題node
五:Mocha/Karma+Travis.CI的前端測試工做流
Mocha:mocha 是一個功能豐富的前端測試框架。所謂"測試框架",就是運行測試的工具。經過它,能夠爲JavaScript應用添加測試,從而保證代碼的質量。mocha 既能夠基於 Node.js 環境運行 也能夠在瀏覽器環境運行。官網地址git
Karma:一個基於Node.js的JavaScript測試執行過程管理工具(Test Runner)。該工具可用於測試全部主流Web瀏覽器,也可集成到CI(Continuous integration)工具,也可和其餘代碼編輯器一塊兒使用。這個測試工具的一個強大特性就是,它能夠監控文件的變化,而後自行執行,經過console.log顯示測試結果。Karma的一個強大特性就是,它能夠監控一套文件的變換,並當即開始測試已保存的文件,用戶無需離開文本編輯器。測試結果一般顯示在命令行中,而非代碼編輯器。這也就讓 Karma 基本能夠和任何 JS 編輯器一塊兒使用。github
Travis.CI: 提供的是持續集成服務(Continuous Integration,簡稱 CI)。它綁定 Github 上面的項目,只要有新的代碼,就會自動抓取。而後,提供一個運行環境,執行測試,完成構建,還能部署到服務器。api
持續集成指的是隻要代碼有變動,就自動運行構建和測試,反饋運行結果。確保符合預期之後,再將新代碼"集成"到主幹。瀏覽器
持續集成的好處在於,每次代碼的小幅變動,就能看到運行結果,從而不斷累積小的變動,而不是在開發週期結束時,一會兒合併一大塊代碼。安全
對於Travis.CI,有兩個學習地址推薦阮一峯和廖雪峯服務器
斷言庫:框架