JavaScript单元测试入门

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

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

所谓”测试框架”,就是运行测试的工具。通过它,可以为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' });

// 布尔值为true
expect('everthing').to.be.ok;
expect(false).to.not.be.ok;

// typeof
expect('test').to.be.a('string');
expect({ foo: 'bar' }).to.be.an('object');
expect(foo).to.be.an.instanceof(Foo);

// include
expect([1,2,3]).to.include(2);
expect('foobar').to.contain('foo');
expect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');

// empty
expect([]).to.be.empty;
expect('').to.be.empty;
expect({}).to.be.empty;

// match
expect('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 命令,看到以下运行结果:
这里写图片描述

测试通过!

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值