Unit Testing

动用Mocha,Chai和Supertest对大家的Koajs工程的各个API举行单元测试。

模块准备

因为Koajs对ES6
generator的支撑。所以在甄选模块的时候需要采纳相应的co封装模块。

  • mocha 和 co-mocha
  • chai
  • supertest 和 co-supertest

npm install mocha co-mocha supertest co-supertest chai --save-dev

至于 json,Mocha
Karma
的选拔此间就不再探讨了 🙂

发端测试

co-mocha 引用

package.json中修改test script为:

"test": "mocha --harmony --require co-mocha"

依然在测试文件中插入:

require('co-mocha');

测试代码编写

始建测试文件solee.test.js.

先是在运营测试前须求,写入一些少不了的环境变量:

process.env.NODE_ENV = 'test';
process.env.DATABASE = 'mysql://********'

接下来引用大家的Koajs项目和对应模块。大家Koajs工程入口放在lib\index.js,并且注意co-supertest的引用情势:

var app = require('../lib');
var request = require('co-supertest').agent(app.listen());
var should = require('chai').should();

describe叙述大家须要测试的大概内容之后,在it中初步写测试代码。因为会接纳ES6的yield主意因而function急需进入*

it('should return list of details with exist user', function *() {
    ···
}

利用co-supertest做客大家提供的api接口。可以直接调用内置expect去做一些表达过滤,例如:Content-Type是json,重临码是200等:

var res = yield request
        .get('/points/point/3/details')
        .set('Accept', 'application/json')
        .expect('Content-Type', /json/)
        .expect(200)
        .end();

得到再次回到内容res.text,再利用Chaishould模块对回到内容展开验证。

var body = JSON.parse(res.text);
      body.should.have.deep.property('data.list_points').length.above(0);
      body.should.have.deep.property('data.total_points').above(0);

末尾运营npm test就足以看出对3个API简单单元测试的结果了。

测试结果

总结

我们得以对2个API举行各个气象的单元测试,不过为了填补我们从不想到的情景,能够辅以测试的覆盖率来发现大家的职能是不是完善。而覆盖率使用
istanbul
感觉爽爽的。

npm install -g istanbul

istanbul cover _mocha

_mocha前边的下划线不可以省。

题外话

本人开首写测试的时候老是不成事,读取不到Koa工程app,最终发现是以下代码惹的祸:

http.createServer(app.callback()).listen(process.env.PORT || 3333);

修改成:

app.listen(process.env.PORT || 3333);

就OK了

相关文章

网站地图xml地图