1:什么是单元测试?

  1.1:单元测试又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。单元测试主要是用来检验程式的内部逻辑,也称为个体测试、结构测试或逻辑驱动测试。通常由撰写程式码的程式设计师负责进行。单元测试在后台开发中非常流行和普及,比如JAVA开发者的JUnit等,而在前端开发中则使用的非常少。究其原因,主要是单元测试更适用于逻辑代码的测试,这对于JAVA等后台编程语言来说测试起来非常方便,但是前端开发很多时候要要UI打交道,UI相关的代码不是不可以进行单元测试,但的确很麻烦,比起逻辑代码来说困难多了,这就导致了单元测试在前端开发没有普及起来。

2:单元测试的优点

  2.1:  单元测试是一种无价的文档,它是展示函数或类如何使用的最佳文档。这份文档是可编译、可运行的,并且它保持最新,永远与代码同步。

3:javscript中单元测试框架

  3.1: jsUnit 系统化的解决方案,基于XNuit规范.

  3.2: Test.Simple & Test.More 这个是jQuery之父John Resig在他的著作《Pro Javascript》中推荐的测试框架,非常容易上手,非常简洁,适合中小型项目快速引入单元测试         3.3: FireUnit 这个是John Resig另起炉灶做的,在他的博客John Resig - FireUnit: JavaScript Unit Testing Extension,发布了他与Jan Odvarko合作开发的基于Firebug的扩展FireUnit。简单说来,FireUnit给Firebug增加了一个标签面板,并提供了一些简单的JavaScript API来记录和查看测试。

  3.4:QUnit 是jQuery团队开发的JavaScript单元测试工具,可以到http://docs.jquery.com/QUnit中下载

4:断言

  4.1:提取现有代码把他放到不同地方,而不影响现有功能,我们把这一过程称为重构,重构是改善代码设计相当有用的方式。

  4.2:单元测试的基石是断言。“断言是一个命题,预测你的代码的返回结果。如果预测是假的,断言失败,你就知道出了问题。”  

  4.3:

// module模块
module('Module A');

// function isEven(val) { return val % 2 === 0;}
test('isEven()', function() {
    ok(isEven(0), 'Zero is an even number');
    ok( 1 == 1, 'one equals one');
})
module('Module B');
test('test', function() {
    // same和deepEqual相当于===,但是same已被弃用
    same({a: 1}, {a: 1} , 'passes');
    deepEqual( {}, {}, 'fails, these are different objects');

    // equal相当于==,下面的断言是false
    equals( [], [], 'fails, there are different arrays');
})

5:异步测试

  5.1:在前面的示例中,所有的断言都是同步调用的,这意味着他们是一个接着一个运行的。同样 存在着很多异步的函数,例如Ajax请求或通过setTimeout()或sestInterval()调用的方法。

//我们没有写任何断言一样。这是因为断言是被异步执行的,到它被调用的时候,此次测试已经执行完成。Module C: asynchronous test (1, 0, 1)
test('asynchronous test', function() {
    setTimeout(function() {   ok(true);  }, 100)
})  

// 正确写法,使用了stop()去暂停此次测试案例, 并且在断言被调用以后,我们使用start()继续。
test('asynchronous test2', function() {
    stop();setTimeout(function() {ok(true);start(); }, 100)
})

// QUnit提供了一个捷径:asyncTest()
asyncTest('asynchronous test', function() {
    setTimeout(function() {   ok(true); start();  }, 100)
})  

  5.2:setTimeout()通常会调用它自己的回调函数,但如果它是一个自定义的函数(例如:一个Ajax调用)。你如何确认回调函数被调用了呢?并且如果回调函数没有被调用,start()将不会被执行,整个单元测试将被挂起:

, function() {    stop();   expect(3);     ajax(function() {  ok(true);  })     ajax(function() {  ok(true);  ok(true);  })     setTimeout(function() {  start();  }, 2000); 
})

jsQunit的更多相关文章

  1. linqjs

    Project Descriptionlinq.js - LINQ for JavaScript Features implement all .NET 4.0 methods and many ex ...

随机推荐

  1. C语言基础补习

    coolshell 中一个小例子在VC6.0编译后反汇编结果仅作记录: 源码: #include <stdio.h> int main(void) { ]; printf("%x ...

  2. JavaScript 学习小结

    简要的功能点: 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行. 操作 HTML 元素 d ...

  3. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework的依赖注入和控制反转

    Dependency Injection and Inversion of Control 1.概述: 1.1相关概念 bean:由IoC容器所管理的对象,也即各个类实例化所得对象都叫做bean 控制 ...

  4. qt5中QPrinter的使用兼容性问题

    qt5与qt4在QPrinter中使用的不同点如下: 在.pro文件中加入如下语句:

  5. [题解]poj 1274 The Perfect Stall(网络流)

    二分匹配传送门[here] 原题传送门[here] 题意大概说一下,就是有N头牛和M个牛棚,每头牛愿意住在一些牛棚,求最大能够满足多少头牛的要求. 很明显就是一道裸裸的二分图最大匹配,但是为了练练网络 ...

  6. js实例:验证只能输入数字和一个小数点

    分享一个javascript脚本代码,用于验证只能输入数字和一个小数点,检测数字输入是否符合要求,效果不错,有用到的朋友拿去吧. 原文地址:http://www.jbxue.com/article/1 ...

  7. WCF权限控制

       前面写了 WCF账户密码认证, 实现了帐号密码认证, 接下来看看如何对方法的细粒度控制, 本文很大程度参考了 WCF安全之基于自定义声明授权策略, 这篇文章对原理讲得比较清楚, 而我这篇文章呢, ...

  8. 最简单的访问google的办法

    我用的是猎豹浏览器,在工具下面的猎豹应用市场里面,搜索红杏,安装即可. 打开google产品地址时,如果地址栏里面右边的杏是绿色的,代表正常,如果是红色的,代表不正常. 可能是装了其他代理软件,如Sw ...

  9. PHP从mysql获取数据的方法

    <?php require "database.php"; //读取数据库中的数据 $sql_1 = "SELECT * FROM test_table" ...

  10. hibernate基础

    另存为查看吧