`cluster` code coverage with istanbul
阿新 • • 發佈:2018-12-23
cluster
code coverage with istanbul
I want to show you how to create code coverage using istanbul.
master.js
const cluster = require('cluster'); const path = require('path'); const workerPath = path.join(__dirname, 'worker.js'); // setup cluster if running with istanbul coverage if (process.env.running_under_istanbul) { // use coverage for forked process // disabled reporting and output for child process // enable pid in child process coverage filename cluster.setupMaster({ exec: './node_modules/.bin/istanbul', args: [ 'cover', '--report', 'none', '--print', 'none', '--include-all-sources', '--include-pid', workerPath, ] }); } else { cluster.setupMaster({ exec: workerPath, }); } // fork two workers cluster.fork(); cluster.fork();
worker.js
const koa = require('koa'); const app = koa(); app.use(function* () { if (this.query.uid) { return this.body = { uid: this.query.uid, }; } this.status = 403; this.body = { error: 'please login first' }; }); app.listen(1984); console.log('[%s] start listening on 1984', process.pid);
test/all.test.js
const request = require('supertest'); describe('cluster coverage unittest', function () { before(function (done) { require('../master'); const port = 1984; const app = { port: port, url: 'http://127.0.0.1:' + port, address: function () { return { port: port }; }, // mock koa api callback: function () { return app; }, }; this.app = app; setTimeout(done, 1500); }); it('should 200 when user login', function (done) { request(this.app.callback()) .get('/?uid=123') .expect({ uid: '123' }) .expect(200, done); }); it('should 403 when anonymous user request', function (done) { request(this.app.callback()) .get('/') .expect({ error: 'please login first' }) .expect(403, done); }); });
run test
Run the unittest and create coverage report
$ npm run cov
> [email protected] cov /Users/mk2/git/fengmk2.github.com/blog/2015/cluster-coverage
> npm run clean && npm run test-cov && istanbul report
> [email protected] clean /Users/mk2/git/fengmk2.github.com/blog/2015/cluster-coverage
> rm -rf coverage
> [email protected] test-cov /Users/mk2/git/fengmk2.github.com/blog/2015/cluster-coverage
> istanbul cover --include-all-sources node_modules/.bin/_mocha -- --check-leaks test/*.test.js
> istanbul report