前回の記事「Safx: gulp-mochaのテスト結果をJenkinsで集計できるようにする」ではgulp-mochaを使って、テスト結果をJenkinsで集計できるようにしました。
今回はgulp-istanbulを使ってテストのカバレッジを集計できるようにします。
gulp-istanbulの導入とタスクの追加
まず、gulp-istanbulを導入します。
$ npm install --save-dev gulp-istanbul
あとは、gulpfile.coffeeでパッケージを読み込んで、タスクを追加するだけです。
istanbul = require 'gulp-istanbul' # cover gulp.task 'cover', -> gulp.src ['lib/*.js'] .pipe istanbul() .on 'end', -> gulp.src ['lib/*.js', 'test/*.coffee'] .pipe mocha() .pipe istanbul.writeReports 'coverage'
これで、gulp cover
でテストカバレッジを取得できるようになります。
$ gulp cover [gulp] Using file /Users/safx/src/.jenkins/workspace/Sample/gulpfile.js [gulp] Working directory changed to /Users/safx/src/.jenkins/workspace/Sample [gulp] Running 'cover'... [gulp] Finished 'cover' in 27 ms 3 passing (3ms) ----------------+-----------+-----------+-----------+-----------+ File | % Stmts |% Branches | % Funcs | % Lines | ----------------+-----------+-----------+-----------+-----------+ lib/ | 100 | 85.71 | 100 | 100 | sample.js | 100 | 85.71 | 100 | 100 | ----------------+-----------+-----------+-----------+-----------+ All files | 100 | 85.71 | 100 | 100 | ----------------+-----------+-----------+-----------+-----------+ =============================== Coverage summary =============================== Statements : 100% ( 6/6 ) Branches : 85.71% ( 6/7 ) Functions : 100% ( 2/2 ) Lines : 100% ( 6/6 ) ================================================================================ $ ls coverage lcov-report/ lcov.info
なお、open coverage/lcov-report/index.html
で、HTML形式のリポートを見ることもできます。
Jenkinsを利用しないのなら、こちらを利用するとよいでしょう。
lcov_cobertura.pyの取得
gulp-istanbulで得られるファイルは、そのままではJenkinsで利用できません。
そこで、Coberturaプラグインで扱える形式に変換するために、 「lcov to Cobertura XML Converter (lcov_cobertura.py)」を利用します。
もし、lcov_cobertura.pyを単体で利用するなら、次のようになります。
curl -O https://raw.github.com/eriwen/lcov-to-cobertura-xml/master/lcov_cobertura/lcov_cobertura.py python lcov_cobertura.py coverage/lcov.info
これで、Coberturaプラグインで利用可能なcoverage.xmlというファイルが作成されます。
Jenkins
Jenkinsでは上のlcov_cobertura.pyを使うように「シェルの実行」と「Coberturaカバレッジ・レポートの集計」で次のように書くだけです。
gulp cover python lcov_cobertura.py coverage/lcov.info
これで、ビルド実行するとコードカバレッジが表示されるようになります。
おわりに
gulp-istanbulとJenkinsを使ってテストのカバレッジを集計できるようにしました。
gulpのタスクで、testとcoverのコードがDRYでないのが、どうにかしたいところです。
gulpfile.coffee
# base gulp = require 'gulp' gutil = require 'gulp-util' # misc cond = require 'gulp-if' clean = require 'gulp-clean' # compilers uglify = require 'gulp-uglify' lsc = require 'gulp-livescript' coffee = require 'gulp-coffee' # test tools mocha = require 'gulp-mocha' istanbul = require 'gulp-istanbul' isRelease = gutil.env.release? # compile gulp.task 'script', -> gulp.src 'src/**/*.ls' .pipe lsc() .on 'error', gutil.log .pipe cond isRelease, uglify() .pipe gulp.dest 'lib' gulp.task 'watch', -> gulp.watch 'src/**/*.ls', ['script'] gulp.task 'clean', -> gulp.src 'lib/*.js', {read:false} .pipe clean() # test gulp.task 'test', ['script'], -> gulp.src ['lib/*.js', 'test/*.coffee'] .pipe mocha {reporter: 'xunit-file'} # cover gulp.task 'cover', -> gulp.src ['lib/*.js'] .pipe istanbul() .on 'end', -> gulp.src ['lib/*.js', 'test/*.coffee'] .pipe mocha() .pipe istanbul.writeReports 'coverage' gulp.task 'default', ['script', 'watch']
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。