前回の記事「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 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。