【Mocha.js 101】Mocha 入门指南
序
说到质量控制,不得不提起测试驱动开发(TDD)和行为驱动开发(BDD)。随着敏捷软件开发的推行,软件质量控制的重担也逐渐从测试工程师转向了研发工程师。测试驱动也随之悄然而生,成为了敏捷开发中重要的一环。
在 Java 项目开发中,有很多好用的测试框架可供选用:Spring Test、JUnit、PowerMock…Maven也提供了mvn test构建来鼓励大家构建测试。
然而,在前端开发的领域里,测试驱动以及自动化测试仍然不像 Java 中那样被重视。本系列文章给大家介绍一个常用的 JavaScript 测试框架——Mocha.js,希望能够引起大家对前端自动化测试的关注。
本系列文章所涉及的相关代码均会提交到我的 GitHub 上。
笔者使用的环境是:
操作系统:OS X El Capitan version 10.11.3
Node.js:v5.1.0
浏览器:Chrome 48.0.2564.116(64-bit)
准备工作
Mocha.js
使用 NPM 安装 Mocha.js:
$ npm install -g mocha
断言库
Mocha.js 并没有对断言进行约束,我们可以选用各种断言类库以满足我们在项目中的各种不同需求。
- should.js,BDD 风格断言
- expect.js,expect() 风格断言
- chai,expect(), assert() 风格断言
- better-assert,C 风格断言
- unexpected,一个可扩展的 BDD 风格断言库
- unit.js
工程结构
通常,我们将源代码放在 src 目录,将测试代码放在 test 目录。
一个最简单的例子
首先,我们来创建一个 src/chapter0/example1.js ,包含如下内容:
// 引入 assert 断言库
var assert = require( 'assert' ); // 定义对 String 类的测试
describe( 'String', function () { // 定义对 String.length 方法的测试
describe( '#length', function () { // 定义测试行为
it( 'should return the string length.', function () {
assert.equal( 10, '0123456789'.length );
} );
} );
} );
由于上述代码引用了一个 assert 断言库,所以我们需要安装它:
$ npm install --save-dev assert
下面,我们就可以使用 mocha 执行我们的测试用例了:
$ mocha test/chapter0/example1.js
我们可以看到如下输出:
String
#length
✓ should return the string length. 1 passing (7ms)
得到上述输出,则证明我们的测试用例已经全部通过,可以放心的用在生产环境啦~
初级应用实战
模拟场景:创建一个计算器工具类,提供基本数字计算功能。
首先,我们创建 src/chapter0/Calculator.js 文件,并在其中实现计算器的业务逻辑代码。内容如下:
/**
* 定义 Calculator 工具类, 用于数字计算
* @constructor
*/
function Calculator() {
} /**
* 计算 a + b 结果
* @param a 被加数
* @param b 加数
* @returns {number}
*/
Calculator.add = function ( a, b ) {
return a + b;
}; /**
* 计算 a - b 结果
* @param a 被减数
* @param b 减数
* @returns {number}
*/
Calculator.minus = function ( a, b ) {
return a - b;
}; // Export the calculator class.
module.exports = Calculator;
针对上述业务逻辑代码,我们创建 test/chapter0/CalculatorTest.js 文件,并在其中添加测试代码:
var assert = require( 'assert' );
var Calculator = require( '../../src/chapter0/Calculator' ); // 定义对 Calculator 的测试
describe( 'Calculator', function () { // 定义对 Calculator.add 方法的测试
describe( '#add', function () { // 测试 1 + 2 = 3
it( '1 + 2 = 3', function () {
assert.equal( 3, Calculator.add( 1, 2 ) );
} ); // 测试 2 - 1 = 1
it( '2 - 1 = 1', function () {
assert.equal( 1, Calculator.minus( 2, 1 ) );
} );
} );
} );
接下来,让我们使用 mocha 执行测试:
$ mocha test/chapter0/CalculatorTest.js
我们将会得到如下输出:
Calculator
#add
✓ 1 + 2 = 3
✓ 2 - 1 = 1 2 passing (7ms)
OK!大功告成!我们的代码已经经过测试,可以用在生产环境啦~
验证重构正确性
不了解 BDD 的人或许会疑惑:单元测试代码有什么用呢?我们完全可以把项目运行起来,并执行一遍自己的测试用例,来确保正确性,那么为什么要花时间去编写单元测试代码呢?
那么我们来看看下面这个场景:现在,Calculator 类需要允许输入字符串,并计算出数值计算的结果。如:"1" + "2" 需要得到 3。(如果只是之前的实现方式,我们将会得到 "12")
那么,我们先来重构一下自己的代码:
Calculator.add = function ( a, b ) {
return parseInt( a ) + parseInt( b );
}; Calculator.minus = function ( a, b ) {
return parseInt( a ) - parseInt( b );
};
接下来,我们只需要在测试代码中添加如下内容:
// 测试 "1" + "2" = 3
it( '"1" + "2" = 3', function () {
assert.equal( 3, Calculator.add( '1', '2' ) );
} ); // 测试 "2" - "1" = 1
it( '"2" - "1" = 1', function () {
assert.equal( 1, Calculator.minus( '2', '1' ) );
} );
接下来,执行测试:
$ mocha test/chapter0/CalculatorTest.js
得到输出结果:
Calculator
#add
✓ 1 + 2 = 3
✓ 2 - 1 = 1
✓ "1" + "2" = 3
✓ "2" - "1" = 1 4 passing (7ms)
上述结果证明,重构后的代码在字符串形式数字计算上没有问题,并且也能完美兼容之前的数字计算。
Pretty cool 哈?我们只需要执行一句测试指令,就可以确保重构的正确性,以及确认对其他业务逻辑代码是否产生了影响。
接下来,让我们享受测试驱动带来的快乐吧~
本文以 CC BY-NC-SA 3.0 CN 协议共享,转载、共享及二次创作时请保留原文出处及链接,请勿用于商业用途。
本文链接:http://litecodes.com/dev/frontend/mochas-101-getting-started/
【Mocha.js 101】Mocha 入门指南的更多相关文章
- 【Mocha.js 101】同步、异步与 Promise
前情提要 在上一篇文章<[Mocha.js 101]Mocha 入门指南>中,我们提到了如何用 Mocha.js 进行前端自动化测试,并做了几个简单的例子来体验 Mocha.js 给我们带 ...
- 【Mocha.js 101】钩子函数
前情提要 在上一篇文章<[Mocha.js 101]同步.异步与 Promise>中,我们学会了如何对同步方法.异步回调方法以及 Promise 进行测试. 在本篇文章中,我们将了解到 M ...
- 测试驱动开发(TDD)及测试框架Mocha.js入门学习
组里马上要转变开发模式,由传统的开发模式(Developer开发,QA测试),转变为尝试TDD(Test-driven development,测试驱动开发)的开发模型.由此将不存在QA的角色,或者仅 ...
- Vue.js 入门指南之“前传”(含sublime text 3 配置)
题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴 ...
- Vue 入门指南 JS
Vue 入门指南 章节导航 英文:http://vuejs.org/guide/index.html 介绍 vue.js 是用来构建web应用接口的一个库 技术上,Vue.js 重点集中在MVVM模式 ...
- 《Gulp 入门指南》 : 使用 gulp 压缩 JS
<Gulp 入门指南> : 使用 gulp 压缩 JS 请务必理解如下章节后阅读此章节: 安装 Node 和 gulp 访问论坛获取帮助 压缩 js 代码可降低 js 文件大小,提高页面打 ...
- Ext JS 6学习文档–第1章–ExtJS入门指南
Ext JS 入门指南 前言 本来我是打算自己写一个系列的 ExtJS 6 学习笔记的,因为 ExtJS 6 目前的中文学习资料还很少.google 搜索资料时找到了一本国外牛人写的关于 ExtJS ...
- Practical Node.js (2018版) 第3章:测试/Mocha.js, Chai.js, Expect.js
TDD and BDD for Node.js with Mocha TDD测试驱动开发.自动测试代码. BDD: behavior-driven development行为驱动开发,基于TDD.一种 ...
- node.js Web应用框架Express入门指南
node.js Web应用框架Express入门指南 作者: 字体:[增加 减小] 类型:转载 时间:2014-05-28 我要评论 这篇文章主要介绍了node.js Web应用框架Express入门 ...
随机推荐
- 矩阵k次幂 采用三重循环
#include<iostream> using namespace std; int main() { int n,k; ][],b[][],c[][]; while(cin>&g ...
- 数位DP入门
HDU 2089 不要62 DESC: 问l, r范围内的没有4和相邻62的数有多少个. #include <stdio.h> #include <string.h> #inc ...
- css3实现逐渐变大的圆填充div背景的效果
手机端现在的一些应用会运用上这样一个效果,就是duang的一下出现一个圆变大直到填充整个div,动感十足. 想到css3的scale属性,就自己来实现一下. <div id="bcd& ...
- CentOS 6.7 中安装Emacs 24.5
Emacs 版本:http://mirror.bjtu.edu.cn/gnu/emacs/emacs-24.5.tar.gz CentOS 内核版本:2.6.32-573.el6.x86_64 参考资 ...
- 需要不断学习的编程知识库list
1.重构思想: 2.回调思想: 3.封装思想: 4.模块化思想: 5.复用思想: 6.C++的面向对象思想: -----后续
- Angular js 之一些简单的js操作
1.<div ng-if()> </div> 括号里面是布尔值 如果是false那么你ng-if的那个dom就会不显示.(感觉这是angular js中最给力的一点) 一般会 ...
- javascript快速排序
function quickSort(arr){ if(arr.length <= 1) return arr;//判断是否有效数组 var cut = Math.floor(arr.lengt ...
- Monkey for iOS(CrashMonkey4IOS)
CrashMonkey4IOS介绍 支持真机测试.模拟器测试 支持收集系统日志(Systemlog).崩溃日志(Crashlog).instrument行为日志 支持测试报告截图,绘制行为轨迹 支持测 ...
- keep the bar green to keep the code clean——Junit详解(二)
测试用例&测试套件 举个栗子: 编写MyStack类模拟栈,并对其进行测试用例编写测试: 编写文件删除方法,并对其删除测试. 不再做演示,戳此获取代码 MyStack类: public cla ...
- 痛苦的vsftpd配置
1.下载安装:yum install vsftpd 2.添加用户和组(不一定要添加组) group -g 1010 customedname useradd -g customedname -d /h ...