gulpでmocha-phantomjs+jscoverage

2014-02-14T00:00:00+00:00 JavaScript Node.js gulp

以前に「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"]);

gradle-android-test-plugin+Robolectricでテスト ActionBar-PullToRefreshをメニューボタン等で連動させる