探知JS测试(1)

有必定水平的js童鞋,应该会常常看到一些书上,在介绍项目的时候,会不禁自主说道测试。 好比,单元测试,函数测试,或是TDD,BDD等测试模式。
没错,这也是咱们须要进行掌握的。 固然,若是你的项目仅仅是写的几个demo,而去写测试的话,这样会有点浪费时间,可是本人很是鼓励这样作,由于你在测试时,会发现本身的代码覆盖率,在经本身重构的时候一点一点的变好。 这感受是很是不同的。并且在大项目中,使用测试,无疑是产品和你撕逼是,你用来堵住他嘴的最佳手段。前端

单元测试

这是测试类型的一种,所谓的单元即,由一些函数组成能完成某项功能的模块。单元测试的目的就是保证你写的模块可以完成必定任务而且不出现bug. 另外,单元测试,也是单一职责原则的一个具体体现,若是在你的代码测试过程当中,须要require多个模块时,这说明你测试的主体模块的耦合性比较高,这也是提醒你进行重构的flag。node

单元测试的过程

  1. 想好测试用例数据库

  2. 动手写测试npm

  3. 查看测试结果,经过则Pass,不然应该进行repeat数组

测试模式

想说一下,测试模式和单元测试的区别。
测试模式->(包括)单元测试.
一般测试模式有BDD和TDD模式。框架

TDD

TDD全称为Test-driven development即,测试驱动开发. 这个能够算是自主测试,用来帮助你写出好代码的一个很是好的办法。 也是上文说到的,当本身看到本身的代码覆盖率愈来愈高的时候,内心应该是满满的自豪感。
一般的测试步骤应该是:函数

  1. 先写测试单元测试

  2. 再写代码测试

  3. 测试ui

  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用户)
说明你的virgin测试已经完成了。今天就到这吧,总体的介绍了BDD的测试,断言库,测试框架,后续会深刻介绍断言库和测试框架。ending~

相关文章
相关标签/搜索