updated to use nyc and istanbul 1.0, added coverage for browser tests and merged with server coverage for a more accurate number

This commit is contained in:
Michael Rawlings 2016-11-14 18:35:52 -08:00
parent f4bc55ec5e
commit c35bbf0b9d
7 changed files with 72 additions and 12 deletions

5
.gitignore vendored
View File

@ -10,4 +10,7 @@
coverage
.nvmrc
~*
/.cache
/.cache
*.marko.js
/test/generated/
.nyc_output

View File

@ -5,5 +5,5 @@ node_js:
- "6"
- "7"
language: node_js
script: "npm run test-coverage"
script: "npm run test-generate-coverage"
after_success: "npm run coveralls"

View File

@ -20,9 +20,10 @@
"url": "https://github.com/marko-js/marko.git"
},
"scripts": {
"test": "npm run mocha -s && npm run test-widgets -s && npm run jshint -s",
"test": "npm run jshint -s && npm run mocha -s && npm run test-widgets -s",
"mocha": "mocha --ui bdd --reporter spec ./test/",
"test-coverage": "istanbul cover _mocha --include-all-sources -- --ui bdd --reporter spec ./test && npm run test-widgets && npm run jshint",
"test-coverage": "npm run test-generate-coverage && nyc report --reporter=html && open ./coverage/index.html",
"test-generate-coverage": "nyc -asc npm run test",
"test-fast": "mocha --ui bdd --reporter spec ./test/render-test",
"test-async": "mocha --ui bdd --reporter spec ./test/async-render-test",
"test-taglib-loader": "mocha --ui bdd --reporter spec ./test/taglib-loader-test",
@ -34,7 +35,7 @@
"test-widgets-browser-dev": "browser-refresh test/browser-tests-runner/cli.js test/widgets-browser-tests.js --server",
"test-widgets-page": "browser-refresh test/browser-tests-runner/cli.js test/widgets-browser-tests.js --server --page",
"jshint": "jshint compiler/ runtime/ taglibs/ widgets/",
"coveralls": "cat ./coverage/lcov.info | coveralls"
"coveralls": "nyc report --reporter=text-lcov | coveralls"
},
"author": "Patrick Steele-Idem <pnidem@gmail.com>",
"maintainers": [
@ -86,15 +87,19 @@
"express": "^4.13.4",
"fs-extra": "^0.30.0",
"ignoring-watcher": "^1.0.2",
"istanbul": "^0.4.3",
"istanbul-lib-instrument": "^1.3.0",
"jquery": "^2.1.3",
"jsdom": "^9.6.0",
"jshint": "^2.5.0",
"lasso": "^2.4.1",
"lasso-marko": "^2.1.0",
"md5-hex": "^1.3.0",
"mkdirp": "^0.5.1",
"mocha": "^2.3.3",
"mocha-phantomjs": "^4.1.0",
"mocha-phantomjs-core": "^1.3.1",
"mocha-phantomjs-istanbul": "0.0.2",
"nyc": "^9.0.0",
"open": "0.0.5",
"phantomjs-prebuilt": "^2.1.13",
"request": "^2.72.0",
"require-self-ref": "^2.0.1",
@ -113,6 +118,13 @@
"browser": {
"./node-require.js": "./node-require-browser.js"
},
"nyc": {
"exclude": [
"**/benchmark/**",
"**/coverage/**",
"**/test/**"
]
},
"homepage": "http://markojs.com/",
"version": "4.0.0-beta.2",
"logo": {

View File

@ -69,6 +69,9 @@ function autoTest(name, dir, run, options, done) {
exports.scanDir = function(autoTestDir, run, options) {
describe('autotest', function() {
if(options && options.timeout) {
this.timeout(options.timeout);
}
fs.readdirSync(autoTestDir)
.forEach(function(name) {
if (name.charAt(0) === '.') {

View File

@ -11,8 +11,10 @@ var defaultPageTemplate = require('./page-template.marko');
var spawn = require('child-process-promise').spawn;
var fs = require('fs');
var mkdirp = require('mkdirp');
var mochaPhantomJSCommand = path.join(__dirname, '../../node_modules/.bin/mocha-phantomjs');
var md5Hex = require('md5-hex');
var mochaPhantomJSCommand = require.resolve('mocha-phantomjs-core');
var phantomjsBinPath = require('phantomjs-prebuilt').path;
var shouldCover = !!process.env.NYC_CONFIG;
function generate(options) {
return new Promise((resolve, reject) => {
@ -41,7 +43,7 @@ function generate(options) {
}
];
var myLasso = lasso.create({
var lassoConfig = {
outputDir: path.join(generatedDir, 'static'),
urlPrefix: startServer ? '/static' : './static',
bundlingEnabled: false,
@ -56,7 +58,15 @@ function generate(options) {
},
require('./lasso-autotest-plugin')
]
});
};
if(shouldCover) {
lassoConfig.plugins.push(
require('./lasso-istanbul-plugin')
);
}
var myLasso = lasso.create(lassoConfig);
var templateData = {
lasso: myLasso,
@ -119,12 +129,23 @@ function runTests(options) {
return generate(options)
.then((generated) => {
console.log(`Running ${generated.url} using mocha-phantomjs...`);
return spawn(mochaPhantomJSCommand, ['-p', phantomjsBinPath, generated.url], {
var mochaPhantomJSOptions = { useColors:true };
if(shouldCover) {
mochaPhantomJSOptions.hooks = 'mocha-phantomjs-istanbul';
mochaPhantomJSOptions.coverageFile = getCoverageFile(options.testsFile);
}
return spawn(phantomjsBinPath, [mochaPhantomJSCommand, generated.url, 'spec', JSON.stringify(mochaPhantomJSOptions)], {
stdio: 'inherit'
});
});
}
function getCoverageFile(testsFile) {
return './.nyc_output/'+md5Hex(testsFile)+'.json';
}
exports.generate = generate;
exports.runTests = runTests;

View File

@ -0,0 +1,21 @@
var istanbul = require('istanbul-lib-instrument');
module.exports = function(lasso, pluginConfig) {
var instrumenter = istanbul.createInstrumenter();
lasso.addTransform({
stream: false,
contentType: 'js',
transform: function(code, context) {
var file = context.dependency.file
if(!file || file.includes('node_modules/')
|| file.includes('test/')
|| file.includes('coverage/')
|| file.includes('benchmark/')
) return code;
return instrumenter.instrumentSync(code, context.dependency.file);
}
});
}

View File

@ -32,5 +32,5 @@ describe('markoc' , function() {
testModule.test(helpers);
done();
});
}, { timeout:20000 });
});