Last active
December 26, 2015 22:59
-
-
Save mohayonao/7226798 to your computer and use it in GitHub Desktop.
istanbul + mocha + grunt
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
grunt.registerTask 'coverage', -> | |
path = require 'path' | |
istanbul = require 'istanbul' | |
Instrumenter = istanbul.Instrumenter # 計算用のファイルを作る | |
Collector = istanbul.Collector # 集計する | |
Reporter = istanbul.Reporter # 出力する | |
hook = istanbul.hook # あとで説明する | |
coverageVar = "$$cov#{Date.now()}$$" | |
instrumenter = new Instrumenter(coverageVar:coverageVar) | |
transformer = instrumenter.instrumentSync.bind(instrumenter) # 計算用のファイルを書き出す関数 | |
testFiles = [] # テストファイルを集める | |
srcFiles = [] # ソースコードにチェックをつける | |
grunt.file.expand('src/**/*.*').forEach (file)-> | |
file = path.resolve path | |
if /_test\.js$/.test path | |
testFiles.push file | |
else | |
srcFiles[file] = true | |
# hookRequire で require をインジェクションする | |
# 具体的には srcFiles にチェックのあるファイルが require されたときに | |
# カバレッジ計算用に改造されたファイルが返るようにしている | |
matchFn = (file)-> srcFiles[file] | |
hook.hookRequire matchFn, transformer | |
# 集計結果はここに入る | |
global[coverageVar] = {} | |
## ここから普通に mocha のテスト | |
Mocha = require('mocha') | |
mocha = new Mocha | |
files.forEach (file)-> | |
mocha.addFile file | |
done = do @async | |
mocha.reporter('nyan').run -> | |
# テストが終わったら集計も終わっているので出力して終わり | |
reporters = [] | |
reporters.push Reporter.create 'text-summary' | |
reporters.push Reporter.create 'lcov', dir:'coverage' | |
cov = global[coverageVar] | |
grunt.file.write 'coverage/coverage.json', JSON.stringify cov | |
collector = new Collector | |
collector.add cov | |
reporters.forEach (report)-> | |
report.writeReport collector, true | |
done() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment