1.爲何須要單元測試html
2.前端相關的單元測試技術前端
2.1 測試框架node
目前,前端的測試框架不少,像QUnit、jasmine、mocha、jest、intern等框架,這些框架各有特色,簡單描述下,感興趣的能夠具體研究:jquery
2.2 斷言庫git
var chai = require('chai'); var assert = chai.assert; // typef assert === 'object' chai.should(); // 對Obejct.prototype進行拓展
2.3 mock庫
先來講說爲何須要mock吧:須要測試的單元依賴於外部的模塊,而這些依賴的模塊具備一些特色,例如不能控制、實現成本較高、操做危險等緣由,不能直接使用依賴的模塊,這樣狀況下就須要對其進行mock,也就是僞造依賴的模塊。例如在使用XMLHttpRequest時,須要模擬http statusCode爲404的狀況,這種狀況實際很難發生,必然要經過mock來實現測試。
github
2.4 test runnerapi
3.單元測試技術的實現原理app
function describe (text, fn) { try { fn.apply(...); } catch(e) { assert(text) } } function fn () { while (...) { beforeEach(); it(text, function () { assert(); }); afterEach(); } } function it(text, fn) { ... fn(text) ... } function assert (expect, actual) { if (expect not equla actual ) { throw new Error(text); } } function fn () { ... } function spy(cb) { var proxy = function () { ... } proxy.called = false; proxy.returnValue = '...'; ... return proxy; } var proxy = spy(fn); // 獲得一個mock函數
4.如何寫單元測試用例 框架
4.1原則函數
4.2 TDD
一句話簡單來講,就是先寫測試,後寫功能實現。TDD的目的是經過測試用例來指引實際的功能開發,讓開發人員首先站在全局的視角來看待需求。具體定義能夠查看維基;
就我的而言,TDD不是一個技術,而是一種開發的指導思想。在目前互聯網的開發環境下,業務開發很難作到TDD開發,一是由於須要更多時間編寫單元測試用例;二是要求很是瞭解業務需求;三是要求開發人員有很強的代碼設計能力。可是當咱們寫組件、工具方法、類庫的時候,TDD就能夠獲得很好地使用。
4.3 BDD
行爲驅動開發要求更多人員參與到軟件的開發中來,鼓勵開發者、QA、相關業務人員相互協做。BDD是由商業價值來驅動,經過用戶接口(例如GUI)理解應用程序。詳見維基.