From c983ab0537fe2013027b7f7574a350f2e65f0205 Mon Sep 17 00:00:00 2001 From: Philip Schatz Date: Tue, 17 Jan 2017 00:32:51 -0600 Subject: [PATCH] :bug: report code coverage --- package.json | 3 ++- script/coverage-helper.js | 17 +++++++++++++++++ script/send-coverage.sh | 11 +++++++++-- 3 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 script/coverage-helper.js diff --git a/package.json b/package.json index 46373a04..eb7f8e06 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "pretest": "npm run-script build", "test": "npm run-script test-node && npm run-script test-browser", "pretest-node": "babel --source-maps true --source-root ./index.js ./test/ -d ./test-transpiled/", - "test-node": "VCR_MODE=cache istanbul cover _mocha -- --reporter spec ./test-transpiled/**/node**.js", + "test-node": "VCR_MODE=cache istanbul cover --report json _mocha -- --reporter spec ./test-transpiled/**/node**.js", "pretest-browser": "webpack --config ./webpack.config-browsertests.js", "test-browser": "./script/run-test-browser.sh", "test-browser:only": "mocha-phantomjs --reporter spec --timeout 20000 http://localhost:9876/test/index.html", @@ -43,6 +43,7 @@ "eslint-config-standard": "^6.2.0", "eslint-plugin-promise": "^3.4.0", "eslint-plugin-standard": "^2.0.1", + "glob": "^7.1.1", "grunt": "~1.0.1", "grunt-bump": "~0.8.0", "http-server": "^0.9.0", diff --git a/script/coverage-helper.js b/script/coverage-helper.js new file mode 100644 index 00000000..0a526c87 --- /dev/null +++ b/script/coverage-helper.js @@ -0,0 +1,17 @@ +var fs = require('fs') +var glob = require('glob') + +glob('./dist/node/**/*.map', removeSourcesContent) +glob('./test-transpiled/**/*.map', removeSourcesContent) + +function removeSourcesContent(err, files) { + if (files.length === 0) { + console.error('Could not find any sourcemap files to tweak for remap-istanbul') + process.exit(1) + } + files.forEach(function(file) { + var contents = JSON.parse(fs.readFileSync(file)) + delete contents.sourcesContent + fs.writeFileSync(file, JSON.stringify(contents)) + }) +} diff --git a/script/send-coverage.sh b/script/send-coverage.sh index 7b205bff..0d922c10 100755 --- a/script/send-coverage.sh +++ b/script/send-coverage.sh @@ -1,13 +1,20 @@ #!/bin/bash +# Istanbul does not preserve sourcemaps when generating code coverage so +# this uses remap-istanbul. But remap-istanbul likes to use the sourcesContent +# field in the sourcemap files which causes them to not point to the correct +# source. So coverage-helper.js removes that field in all sourcemap files. + nodeVer=$(node --version) semver=( ${nodeVer//./ } ) if [[ "${semver[0]}" == "v6" ]]; then echo "==> Reporting coverage to codecov" - $(npm bin)/remap-istanbul --exclude 'index.js' --input ./coverage/coverage.json --output ./coverage/coverage-mapped-to-source.json --type json - $(npm bin)/codecov --file ./coverage/coverage-mapped-to-source.json + rm ./coverage/coverage.json # Just in case so codecov does not find it + node ./script/coverage-helper.js + $(npm bin)/remap-istanbul --exclude 'index.js' --input ./coverage/coverage-final.json --output ./coverage/coverage-mapped-to-source.json --type json + $(npm bin)/codecov --file=./coverage/coverage-mapped-to-source.json else echo "==> Skipping coverage reporting because remap-istanbul only works on node v6+"