article
`cluster` code coverage with istanbul
[istanbul] is already supported Multiple Process Coverage.
cluster code coverage with istanbul
istanbul is already supported Multiple Process Coverage.
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
> cluster-coverage@ cov /Users/mk2/git/fengmk2.github.com/blog/2015/cluster-coverage
> npm run clean && npm run test-cov && istanbul report
> cluster-coverage@ clean /Users/mk2/git/fengmk2.github.com/blog/2015/cluster-coverage
> rm -rf coverage
> cluster-coverage@ 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
See the cluster-coverage report

Comments