From df7d8cd0e28e6f381194fb27ea9b5df3a2968b60 Mon Sep 17 00:00:00 2001 From: "Matthew A. Miller" Date: Thu, 19 Nov 2015 17:25:35 -0700 Subject: [PATCH] Build: add code coverage for node + browsers --- gulpfile.js | 62 +++++++++++++++++++++++++++++++++++++--------------- package.json | 4 +++- 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 322e587..756e634 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -7,6 +7,11 @@ var ARGV = require("yargs"). usage("$0 [options] task [task ...]"). + option("coverage", { + type: "boolean", + describe: "include coverage", + default: false + }). option("browsers", { type: "string", describe: "browsers to run tests in", @@ -84,22 +89,29 @@ function doTestsNodejs() { } gulp.task("test:nodejs:single", function() { + // Constructing the environment descriptor + var environ = require("util").format( + "%s %s (%s %s)", + (process.release && process.release.name) || "node", + process.version, + process.platform, + process.arch + ); + if (ARGV.coverage) { + return gulp.src(SOURCES). + pipe(istanbul()). + pipe(istanbul.hookRequire()). + on("finish", function() { + doTestsNodejs(). + pipe(istanbul.writeReports({ + dir: "./coverage/" + environ, + reporters: ["html", "text-summary"] + })); + }); + } return doTestsNodejs(); }); -gulp.task("cover:nodejs", function() { - return gulp.src(SOURCES). - pipe(istanbul()). - pipe(istanbul.hookRequire()). - on("finish", function() { - doTestsNodejs(). - pipe(istanbul.writeReports({ - dir: "./coverage/nodejs", - reporters: ["html", "text-summary"] - })); - }); -}); - gulp.task("test:nodejs", function(cb) { runSequence("test:lint", "test:nodejs:single", @@ -252,6 +264,25 @@ gulp.task("test:browser:single", function(done) { return found; }); } + if (ARGV.coverage) { + config.browserify.transform = [ + require("browserify-istanbul")({ + ignore: [ + "**/node_modules/**", + "**/test/**", + "**/env/**" + ] + }) + ]; + config.reporters.push("coverage"); + config.coverageReporter = { + dir: "./coverage", + reporters: [ + { type: "html" }, + { type: "text-summary" } + ] + }; + } karma.server.start(config, done); }); @@ -275,11 +306,6 @@ gulp.task("test", function(cb) { "test:nodejs:single", cb); }); -gulp.task("coverage", function(cb) { - runSequence("test:lint", - "cover:nodejs", - cb); -}); gulp.task("clean", ["clean:coverage", "clean:dist"]); gulp.task("dist", function(cb) { runSequence("clean:dist", diff --git a/package.json b/package.json index cba0cca..8049cd0 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ }, "devDependencies": { "browserify": "^11.0.1", + "browserify-istanbul": "^0.2.1", "chai": "^1.10.0", "conventional-changelog": "^0.4.3", "del": "^1.1.1", @@ -54,11 +55,12 @@ "gulp-rename": "^1.2.0", "gulp-sourcemaps": "^1.3.0", "gulp-uglify": "^1.1.0", - "istanbul": "^0.3.5", + "istanbul": "^0.4.0", "jose-cookbook": "git+https://github.com/ietf-jose/cookbook.git", "karma": "^0.12.31", "karma-browserify": "^3.0.1", "karma-chrome-launcher": "^0.1.7", + "karma-coverage": "^0.5.3", "karma-firefox-launcher": "^0.1.4", "karma-ie-launcher": "^0.2.0", "karma-mocha": "^0.1.10",