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)理解应用程序。详见维基.