JavaScript单元测试入门

来源:互联网 发布:怎么做社交软件 编辑:程序博客网 时间:2024/05/16 10:56

首先要弄清楚什么是单元。单元就是一个相对独立的功能模块,可以是一个类,或是一个模块,或是一个方法。

单元测试的目的,就是首先保证一个系统的基本组成单元(类、模块或方法)能正常工作。打个比方,你想一台机器能正常工作,首先要保证它的每一个零件和组件能正常工作。而单元测试就是对这些零件和组件进行的测试。

所谓”测试框架”,就是运行测试的工具。通过它,可以为JavaScript应用添加测试,从而保证代码的质量。

JavaScript的单元测试框架很多,这里我们介绍一下Mocha。Mocha(发音”摩卡”)诞生于2011年,是现在最流行的JavaScript测试框架之一,在浏览器和Node环境都可以使用。

下面就来介绍一下Mocha的使用方法(以下操作都假设你的电脑有Nodejs环境)。

安装Mocha

打开命令提示符工具,运行以下命令,全局安装Mocha:

npm install mocha -g

一个简单的例子

新建一个test目录,进到与test的同级目录,编写一个测试脚本。通常测试脚本与需要测试的源码脚本同名,但是后缀名改为.test.js或.spec.js(表示规格)。这里我们先新建一个测试文件命名为test1.test.js:

var expect = require('chai').expect;describe('expect',function(){    it('4 + 5应该等于9',function(){        expect(4 + 5).to.be.equal(9);    });});

上面这段代码就是测试脚本,它可以独立执行。脚本下包括一个或多个describe块,每个describe块包括一个或多个it块。

describe块称为“测试套件”,表示一组相关的测试。它是一个函数,第一个参数是测试套件的名称,第二个参数是实际执行的函数。

it块称为“测试用例”,表示一个单独的测试,是测试的最小单位。它也是一个函数,第一个参数是测试用例的名称,第二个参数是实际执行的函数。

下面的“expect(4 + 5).to.be.equal(9);”语句叫做断言。所谓断言就是判断源码的实际执行结果与预期是否一致,如果不一致就抛出一个错误。

所有测试用例都应该含有一个或多个断言。断言功能由断言库来实现,Mocha本身并不带有断言库,所以必须先引入断言库

var expect = require('chai').expect;

断言库有很多种,Mocha并不限制使用哪一种。上面代码引入的断言库是chai,并且指定使用它的expect断言风格。expect断言的优点就是很接近自然语言。看,expect(4 + 5).to.be.equal(9),期望(4+5)等于9,多么简洁明了。。。

现在万事具备,切回命令提示符工具,运行mocha 命令,你会看到类似这样的输出:

这里写图片描述

如果expect断言不成立,则会抛出一个错误。只要不抛出错误,测试用例就算通过。

好了,现在你的第一个单元测试的例子已经运行成功了,好开心啊有没有!

expect还有一些其他的语句,如下所示:

// 相等或不相等expect(4 + 5).to.be.equal(9);expect(4 + 5).to.be.not.equal(10);expect(foo).to.be.deep.equal({ bar: 'baz' });// 布尔值为trueexpect('everthing').to.be.ok;expect(false).to.not.be.ok;// typeofexpect('test').to.be.a('string');expect({ foo: 'bar' }).to.be.an('object');expect(foo).to.be.an.instanceof(Foo);// includeexpect([1,2,3]).to.include(2);expect('foobar').to.contain('foo');expect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');// emptyexpect([]).to.be.empty;expect('').to.be.empty;expect({}).to.be.empty;// matchexpect('foobar').to.match(/^foo/);

测试项目中的方法

OK,简单例子说完了,接下来我们看看怎样在项目中测试自己写的方法。

先新建一个项目,文件目录结构如下图所示:

这里写图片描述

其中,calculate.js文件的代码为:

var calculate = {    add: function(a, b){        return a + b;    },    divide: function(a, b){        return a / b;    }}module.exports = calculate;

calculate.test.js文件的代码为:

'use strict';var calculate =  require('./../app/calculate');var expect = require('chai').expect;describe('Caculate', function() {    describe('#calculate', function() {        it('return add result', function() {            expect(calculate.add(1, 2)).to.be.equal(3);        });        it('return divide result', function() {            expect(calculate.divide(2, 2)).equal(1);        });    });});

用命令行工具进入test的同级目录,运行mocha 命令,看到以下运行结果:
这里写图片描述

测试通过!

0 0