前端自动化单元测试——should.js、mocha是啥?

上周我们了解了node Assert 断言库,但是自动化测试要跑起来光靠node Assert肯定是不够的,文章标题中的这些工具会让你的单元测试真正成为自动的并且更加得心应手。那么我们先来看看它们都是些什么东西。

should.js

对于shouldjs,npm官方的解释是一款富有表现力、可读、框架无关的断言库。它的主要目的是让测试断言更富表现力,并对你的测试更有帮助。shouldjs有助于你的测试代码保持整洁,并且让错误信息提供更准确的提示。

简单来说,shouldjs就是node Assert 的一个扩展,它让测试更加友好。因此一般来说,前端的单元测试都会引入shouldjs 而不是直接使用node Assert。为什么说他更富表现力和可读呢?下面举个栗子:

var should = require('should');
 
var user = {
    name: 'tj'
  , pets: ['tobi', 'loki', 'jane', 'bandit']
};
 
user.should.have.property('name', 'tj');
user.should.have.property('pets').with.lengthOf(4);

上面代码中的最后两句就是shouldjs的断言,怎么样,是不是就像一句陈述句?没错,它让断言语义化了。

上面的 user 对象之所以可以直接调用should是因为 shouldjs 在对象的基础原型中统一加入了should,但是如果对象是通过 Object.create( ) 方法创建的,由于创建出来的对象的原型不是原生对象的原型,因此就不能像上面那样使用should。为了解决这个问题,shouldjs在全局提供了shuld( )方法,用法是这样的:

should(user).have.property('name', 'tj');

注:以上代码示例来自npm

Mocha

在此之前还是先来个官方说明:Mocha是一款特性丰富的,运行在浏览器和nodejs 环境的测试框架(framework),它让异步测试更加简单有趣(好吧,官方给它的定义是:简单、灵活、有趣)。所谓测试框架就是运行测试的工具,通过它可以为javascript应用添加测试,从而保证代码的质量。

我们先来添加一个功能模块,假如这个模块是实现两个大数相加的功能(所谓大数就是超过了 js 的 infinity 因此不能直接用 js 中的简单加法),模块代码如下:

function add(a, b) {
  // 实现该函数
  var res = '',
    temp = 0;
  a = a.split('');
  b = b.split('');
  while (a.length || b.length || temp) {
    temp += ~~a.pop() + ~~b.pop();
    res = (temp % 10) + res;
    temp = temp > 9;
  }
    return res.replace(/^0+/, '');
}

module.exports = add

为了测试这个大数相加的模块我们就要写一个测试脚本,测试代码如下:


require('should');

var add = require('../lib/add')

describe('大数相加add方法', function () {
  it('字符串"42329"加上字符串"21532"等于"63861"', function () {
    add('42329', '21532')
      .should.equal('63861') 
  })
  
  it('"843529812342341234"加上"236124361425345435"等于"1079654173767686669"', function () {
    add('843529812342341234', '236124361425345435')
      .should.equal('1079654173767686669')
  })
})

上面的测试脚本可以独立执行。测试脚本中应该包含一个或多个 describe 块,每个 describe 应该包含一个或多个 it 块。

describe块称之为“测试套件”(test suite),表示一组相关的测试。它是一个函数,第一个参数是测试套件的名称(一般会把名称写成对测试内容的简短描述),第二个参数是一个实际执行的函数。

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

我们来跑一下我们上面的测试,命令执行mocha 命令:

可以看到,我们的测试都通过了。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值