通过测试框架为JavaScript应用添加测试,从而保证代码的高质量。这里的笔记例子应用在jaywcjlove/validator.js中。

安装

用到三个工具chai(断言工具),mocha(测试框架),mocha-phantomjs(客户端运行mocha试验在命令行测试通过),先在你的项目中安装这三个工具

# 创建一个目录进入目录
$ mkdir test-demo && cd test-demo # 初始化创建一个 package.json 文件,运行这个命令自动创建
$ npm init # 用管理员权限,安装三个工具
# --save-dev 参数会将这三个工具作为依赖存入packge.json中
$ sudo npm install chai mocha mocha-phantomjs --save-dev

注意:

  1. mocha 这个工具可以全局安装 npm install -g mocha

  2. 本例子使用的方法没有全局安装mocha

  3. 你的电脑必须有Node

  4. 此例子是我在Mac OS x环境弄出来的,其它平台不做解释

测试应用

首先你要写一个你需要测试的 js 例如: 我在 jaywcjlove/validator.js 中测试我我的 dist/validator.js js。在test-demo/test 目录中建立一个validators.html 的HTML

<!DOCTYPE html>
<html>
<head>
<title>单元测试</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../node_modules/mocha/mocha.css" />
</head>
<body>
<div id="mocha"></div>
<script type="text/javascript" src="../dist/validator.js"></script>
<script type="text/javascript" src="../node_modules/chai/chai.js"></script>
<script type="text/javascript" src="../node_modules/mocha/mocha.js" ></script>
<script>mocha.setup('bdd')</script>
<script src="unit/validators.js"></script>
<script>
if (window.mochaPhantomJS) {
mochaPhantomJS.run();
} else {
mocha.run();
}
</script>
</body>
</html>

应用说明

在这个例子中引用了了几个个必要的文件

  • mocha.css 这个是你的测试用例在浏览器中查看需要引用这个样式

  • chai.js 这个是 mocha 的强大的断言工具

  • mocha.js 这个是个测试框架,让你用很好的方式写测试用例

  • ../dist/validator.js 这个是你要测试的js

  • unit/validators.js 这个是你的测试脚本代码

下面这段 js 判断使用 mocha-phantomjs 这个框架。

if (window.mochaPhantomJS) {
mochaPhantomJS.run();
} else {
mocha.run();
}

断言库的用法

mocha.setup('bdd') 使用不同的风格展示,有三个参数可选(bdd|tdd|exports)。基础的代码都复制完成之后,开始写测试用例,在test-demo/test/unit/ 目录中建立一个测试脚本。例如我叫它validators.js。你为了区分它可以在后面添加一个 test的后缀,如validators.test.js 用来表示测试;

var expect = chai.expect;
var assert = chai.assert; var v = new Validator(); describe("validators", function() { it("isEmail() 邮箱验证", function() {
// 断言
expect( v.isEmail('d.s.s.d@qq.com.cn') ).to.be.true;
expect( v.isEmail('d.s-s.d@qq.com.cn') ).to.be.true;
expect( v.isEmail('wowo.o@qq.com') ).to.be.true;
expect( v.isEmail('wowo@123.sd') ).to.be.true;
expect( v.isEmail('wowo@123.23') ).to.be.true;
expect( v.isEmail('wowo.oqqcom') ).to.be.false;
expect( v.isEmail('wowo@123') ).to.be.false;
expect( v.isEmail('wowo@asdf.中国') ).to.be.false;
expect( v.isEmail('wowo@中国.com') ).to.be.false;
expect( v.isEmail('中@qq.com') ).to.be.false; }); it("isIp() IP验证", function() {
expect( v.isIp('01.01.01.0') ).to.be.true;
expect( v.isIp('192.168.1.1') ).to.be.true;
expect( v.isIp('192.168.23.3') ).to.be.true;
expect( v.isIp('192.168.23.3.32.1') ).to.be.true;
expect( v.isIp('192') ).to.be.false;
expect( v.isIp('192.168.1.1233') ).to.be.false;
expect( v.isIp('192.168.1324.123') ).to.be.false;
}); it("isPhone() 手机号码验证", function() {
expect( v.isPhone('13611779473') ).to.be.true;
expect( v.isPhone('+8613611779473') ).to.be.true;
expect( v.isPhone('+23613611779473') ).to.be.true;
}); });

chai.expect 和 chai.assert其实是两种不同的风格如下面,具体断言提供的接口可看官网 http://chaijs.com 或者去看看我做的中文笔记chai 中文手册

assert.equal( v.isPhone('13611779473') ,true)
expect( v.isPhone('13611779473') ).to.be.true;

准备工作都做完了,现在就是,怎么跑测试的步骤来了。

Mocha的基本用法

我们在 package.json 文件中插入一段命令行。

{
"scripts": {
"test": "mocha-phantomjs test/validators.html",
},
}

这个时候你可以使用命令npm test跑一下看一下测试结果:

  validators
✓ isEmail() 邮箱验证
✓ isIp() IP验证
✓ isPhone() 手机号码验证 3 passing (5ms)

这里使用了mocha-phantomjs 所以在命令行中稍微有点慢,中间加载了 webkit 内核,所以为了方便,我们可以直接将test/validators.html 页面在浏览器中打开就可以看到测试结果了。

在Github中显示的测试状态

https://travis-ci.orghttps://circleci.com这两个网站都是持续集成测试的自动测试系统。如果你使用travis-ci.org作为你的自动测试系统,配置起来非常方便,其实这俩货使用起来都很方便。

travis-ci.org

1)在根目录建立一个 .travis.yml,配置CircleCI

language: node_js
node_js:
- "4"

2)提交到你的仓库中。 
3)使用 Github 登录此网站(有可能你要翻墙才能打开这网站) 
4)添加你的项目

README.md 中显示你的状态

只要在 README.md 中引用 travis-ci.org 提供的状态图片即可。

添加项目

选择你的项目

获取状态图片

不细说,图文....

javascript--给你的JS代码添加单元测试的更多相关文章

  1. IOS-网络(网页开发-UIWebView,HTML,CSS,JavaScript,OC和JS代码互调)

    一.网页基础 // // ViewController.m // IOS_0218_网页开发1 // // Created by ma c on 16/2/18. // Copyright © 201 ...

  2. Yii2的View中JS代码添加

    直接写 <script> $(function(){ alert("aaa"); }); <script> 会提示出错 是因为view中添加js代码的前面没 ...

  3. JavaScript入门:002—JS代码放置的位置

    JavaScript在页面中使用,那么这些JS代码应该放在什么位置呢?以下来看一下. 一般来说有两种方式.写在界面上和使用.js文件.1.1界面上的Head部分能够直接放在head标签内,例如以下代码 ...

  4. javascript 全选 反选 js代码

    <script type="text/javascript"> //全选function checkAll() { var objs = window.document ...

  5. [JavaScript]转--如何让JS代码高大上

    原文出处:http://www.cnblogs.com/wenber/p/3630373.html 1,创造简短的写法 你可以这么写: 1 var slice = Array.prototype.sl ...

  6. Javascript DOM编程艺术JS代码

    //com function addLoadEvent (func) { var oldonload = window.onload; if (typeof window.onload != 'fun ...

  7. 如何用QUnit为JS代码做单元测试

    非常好的入门文章: http://www.zhangxinxu.com/wordpress/2013/04/qunit-javascript-unit-test-%E5%8D%95%E5%85%83% ...

  8. 原创:js代码, 让dedecms支持Tag选择, 添加内容更为方便,不用手输Tag

    dedecms在编辑修改内容时,TAG标签需要手动输,中文的Tag, 中间还得用半角字符','分隔,  输入法切来切去很不方便,   于是动手改后台代码, 利用后台的tags_main.php, 让d ...

  9. 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!【转载+整理】

    原文地址 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和for-of循环 生成器 Generators 模板字符串 不定参数和默认参数 解构 Destructu ...

随机推荐

  1. Git 学习笔记(W,I,P)

    /*********************** 个人知识水平有限 有任何错误请尽情指出!!谢谢啦 我的Github 求粉 ミ ゚Д゚彡 ***********************/ 参考教程:廖 ...

  2. css图片高清适配

    同一张图片,在普通屏显示正常,但高清屏出现模糊.原因是原来一个像素的点分成的四个像素的点进行了显示. 解决方案:在高清屏中把图片变成二倍图,前提是二倍的高清图已经存在. .icon{ backgrou ...

  3. [源码阅读]RocketMQ-策略篇

    一:为什么要阅读rocketmq的源码? 1 可以了解mq的底层实现逻辑. 二:打算怎么读,行动路径是哪儿些? 1: 本地启动 2 分步调试 3  fork项目,添加中文注释,提交到自己的代码库.并改 ...

  4. 利用 CSS animation 和 CSS sprite 制作动画

    CSS3 大大强化了制作动画的能力,但是如果要做出图案比较复杂的动画,选择 GIF 依然是一个不错的选择.今天给大家介绍一个使用 CSS animation 配合雪碧图(CSS sprite)来制作动 ...

  5. 27.6 Parallel的静态For,Foreach和Invoke方法

    static void Main(string[] args) { //for (int i = 0; i < 10000; i++) // DoWork(i); //Parallel.For( ...

  6. 面向对象:classmethod、staticmethod、property

    一.classmethod(类方法).staticmethod(静态方法) 方法包括:普通方法.类方法和静态方法,三种方法在内存中都归属于类,区别在于调用方式不同. # 普通方法 由对象调用,至少一个 ...

  7. VMware Workstation搭建Linux操作系统

    1.单击“创建新的虚拟机”选项,并在弹出的“新建虚拟机向导”界面中选择“自定义”单选按钮,然后单击“下一步”. 新建虚拟机向导 2.选择虚拟机硬件兼容性,是否兼容之前旧的版本. 兼容性选择 3.选中“ ...

  8. GitHub:创建和修改远程仓库

    创建远程仓库 首先在GitHub上创建一个仓库命名为learngit.选中public(private要钱),选中 生成README(就是markdown形式的说明文档),便于别人和自己了解仓库的作用 ...

  9. 解析特殊格式的xml到map

    由于项目特殊,需要解析的xml文档样式特别,所以自己写了一个解析特殊xml的方法 先提供xml样式 <?xml version="1.0" encoding="UT ...

  10. 【郑轻邀请赛 C】DOBRI

    [题目链接]:https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=2129 [题意] [题解] NMB 直接说i-1,i-2,i-3不就好了- [Numb ...