gulpでmocha-phantomjs+jscoverage
以前に「mocha-phantomjs+jscoverageでコードカバレッジ出力」な流れをgruntに移植するっていうのをやったのですが、それのgulp版
その前に
以前でも書いたようにjson2htmlcovをやるとエラーにしかならないケースが存在するのですが、これのfixがなくなってるので
#!/usr/bin/env node
// https://github.com/metaskills/mocha-phantomjs/issues/10
var jade = require("jade");
var fs = require("fs");
// Strings for code coverage classes
function coverageClass(n) {
if (n >= 75) return "high";
if (n >= 50) return "medium";
if (n >= 25) return "low";
return "terrible";
}
// Read in templates
var file = __dirname + "/templates/coverage.jade";
var str = fs.readFileSync(file, "utf8");
var fn = jade.compile(str, { filename: file });
// ここから修正
var json = "";
process.stdin.on("data", function(data) {
json += data.toString();
});
process.stdin.on("end", function() {
// Read JSON from stdin
var cov = JSON.parse(json);
// Dump HTML
process.stdout.write(fn({
cov: cov,
coverageClass: coverageClass
}));
});
的な感じで修正しておかないと無理ポなので(ry
本題
mocha-phantomjsでテストしつつコードカバレッジを出力するわけですが、そのテストコード等は前回のをそのまま使う。なので今回はgulpfile.jsというタスク定義なだけを書く
var fs = require("fs"),
spawn = require("child_process").spawn,
gulp = require("gulp"),
yuidoc = require("gulp-yuidoc");
gulp.task("jscoverage", function() {
spawn("jscoverage", ["src"]);
});
gulp.task("test-mocha-phantomjs", function(done) {
var jsonData = "";
var res = spawn("mocha-phantomjs", ["-R", "json-cov", "test/runner.html"]);
res.stdout.on("data", function(data) {
jsonData += data.toString();
});
res.on("exit", function() {
var stream = fs.createWriteStream("coverage.html", { flags: "w" });
var cov = spawn("json2htmlcov");
cov.stdout.pipe(stream);
cov.stdout.on("end", function() {
stream.close();
done();
});
cov.stderr.on("data", function(data) {
throw new Error(data);
});
cov.stdin.write(jsonData);
cov.stdin.end();
});
});
gulp.task("yuidoc", function() {
return gulp.src("src/*.js")
.pipe(yuidoc())
.pipe(gulp.dest("doc"));
});
gulp.task("test", ["jscoverage", "test-mocha-phantomjs"]);