探知JS测试(1)

有肯定程度的js童鞋,应当会经常看到一些书上,在引见项目标时刻,会情不自禁说道测试。 比方,单位测试,函数测试,或是TDD,BDD等测试形式。
没错,这也是我们须要举行控制的。 固然,假如你的项目仅仅是写的几个demo,而去写测试的话,如许会有点浪费时间,然则本人异常勉励如许做,由于你在测试时,会发明本身的代码覆蓋率,在经本身重构的时刻一点一点的变好。 这以为是异常不一样的。而且在大项目中,运用测试,无疑是产物和你撕逼是,你用来堵住他嘴的最好手腕。

单位测试

这是测试范例的一种,所谓的单位即,由一些函数构成能完成某项功用的模块。单位测试的目标就是保证你写的模块能够完成肯定使命而且不涌现bug. 别的,单位测试,也是单一职责准绳的一个详细表现,假如在你的代码测试历程当中,须要require多个模块时,这申明你测试的主体模块的耦合性比较高,这也是提示你举行重构的flag。

单位测试的历程

  1. 想好测试用例

  2. 动手写测试

  3. 检察测试效果,经由过程则Pass,不然应当举行repeat

测试形式

想说一下,测试形式和单位测试的区分。
测试形式->(包含)单位测试.
一般测试形式有BDD和TDD形式。

TDD

TDD全称为Test-driven development即,测试驱动开辟. 这个能够算是自立测试,用来协助你写出好代码的一个异常好的要领。 也是上文说到的,当本身看到本身的代码覆蓋率越来越高的时刻,内心应当是满满的自豪感。
一般的测试步骤应当是:

  1. 先写测试

  2. 再写代码

  3. 测试

  4. 重构

  5. 经由过程
    而在大部分公司内里,一般运用的是BDD测试。这里先对BDD举行解说,背面会将TDD举行探究。

BDD

一样BDD的全称为: Behavior-Driven development。 质朴的说法叫做行动驱动开辟。 BDD的运用场景就是给一些QA工程师运用的,他用他的言语和你举行交换,即他会举行一些测试用例,然后假如经由过程则申明,他已信任你了。
一般BDD测试供应了几个要领:

  1. describe() {alias: behavior()}

  2. it()

  3. before()

  4. after()

  5. beforeEach()

  6. afterEach()
    经由过程上面几个要领,说一下BDD测试应当相识哪些基本概念.

测试套件
在TDD内里是指的是test suit. 在BDD内里就对应describe(),用来对软件某个方面的形貌。
不懂吧~
针关于describe我们详细来说一下吧。 describe接收两个参数, 一个是字符串,别的一个是函数。

describe('Action',function(){
    //...
})

那第一个字符串是开辟者本身写,那末该怎样写呢?
很简朴,我们须要邃晓,我们是要给一个测试套件定名。 即,给一篇文章写一个title一样简朴。
比方,我的一个测试套件是想测试一个计数框架的一些功用。
那我们的describe就能够写为Counter(或许”计数”,一些你本身以为适宜的title),像如许:

describe('Counter',function(){
    it('it should increase',function(){
        //...
    })
    it('it should decrease',function(){
        //...
    })
})

那末,我们起好题目以后,该干什么呢?
起首,该空两格~
接着,就应当开始运用测试用例来写文章的body了。
测试用例
it就是测试用例的weapon, 它和describe类似,接收两个参数。 第一个是对测试的形貌,第二个就是详细完成。

describe('Counter',function(){
    it('it should increase',function(){
        //...
    })
})

一样,it内里的内容该怎样写呢?
我想这不是我的使命,你能够去问下你的语文先生(或许英语先生).
实在,你是用describe和it就已能够写出一篇好文章了。唯一短缺的就是须要在内里填上一些内容。这时刻就须要运用到断言库来帮你造句了。
市面上盛行的断言库有3个,分别是assert,expect,should. 假如学过nodeJS的童鞋应当晓得NodeJS自带assert断言库。然则关于本人而言,以为expect比起assert那种傻逼的写法,看起来照样蛮舒服了。(固然,should也有人运用,症结看你的趣了).
先show show 这3个的作风吧。
比方推断相称的写法:

//assert
assert.equal(cal.result,1);
//expect
expect(cal.result).to.equal(1);
//should
cal.result.shoulde.equal(1)

接下来就看本身的喜欢挑一种吧。
ok~
还记得BDD供应几个API吗? 没错,另有before,after,beforeEach,afterEach他们分别是干什么用的呢?
我这里就运用,官方mocha的demo.

describe('hooks', function() {

  before(function() {
    // runs before all tests in this block
  });

  after(function() {
    // runs after all tests in this block
  });

  beforeEach(function() {
    // runs before each test in this block
  });

  afterEach(function() {
    // runs after each test in this block
  });

  // test cases
});

根据摸cha的说法,上面说的这些函数都是hook. 将测试的状况点暴露给你,让你能够举行相干的操纵。 一样,官方摸cha也举例申明了他们的用处。 比方在数据库翻开的时刻,就能够运用beforeEach来举行更新。

beforeEach(function(done) {
    db.clear(function(err) {
      if (err) return done(err);
      db.save([tobi, loki, jane], done);
    });
  });

要记着,beforeEach会在当前的Block下的统统case之前实行,不论你嵌套若干层。
上面的理论铺垫完了,我们要正式进入,测试的节拍.

mocha框架

起首,我们运转的统统测试,都须要有一个环境支撑,那末mocha就是你的环境。 它应当算是前端测试super 盛行的一个框架吧(固然,另有jasmine,zuul等). 由于内容丰富,显现界面友爱,所以,用户也是许多的。
下载mocha环境:

sude npm install -g mocha

这里实行全局下载。由于,测试环境在全局都是有用的,所以这里就直接放在global下了.
设置assertion
这里我们就运用chai就over了,他包含了3种言语作风,你本身援用就能够了。

sudo npm install -g chai

OK。接下来,先写一个hello world 示例吧。
我们按上述步骤一步一步来.

//本身测试的代码
var Cal = (function(){
    var num = {
        base:0
    };
    var add = function(){
        num.base++;
        return num.base;
    }
    var desc = function(){
        --num.base;
        return num.base;
    }
    return {
        add,desc,num
    }
})();
//ok,如今援用断言库chai
var expect = require('chai').expect;
//写出测试
describe('Counter',function(){
    it('it should increase',function(){
        expect(Cal.num.base).to.below(Cal.add());
    })
    it('it should decrease',function(){
        expect(Cal.num.base).to.above(Cal.desc());
    })
})

ok,如今能够翻开控制台,切换到你测试文件地点的目次,比方,我的是在 demo/demo.js
在控制台输入敕令

mocha demo.js

假如你的屏幕涌现以下:(仅限MAC用户)
《探知JS测试(1)》
申明你的virgin测试已完成了。
本日就到这吧,团体的引见了BDD的测试,断言库,测试框架,后续会深切引见断言库和测试框架。
ending~

    原文作者:villainhr
    原文地址: https://segmentfault.com/a/1190000004428902
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞