UNPKG

lasso-node

Version:

JavaScript widget and page unit testing with on the fly instrumentation

98 lines (79 loc) 3.25 kB
var fs = require('fs'); var path = require('path'); var regexpQuote = require('regexp-quote'); var istanbul = require('istanbul'); var Report = istanbul.Report; var spawn = require('child_process').spawn; var _ = require('lodash'); var untested = require('untested'); function run(options) { options = options || {}; // console.assert(options.lassoDir, 'missing lasso dir'); // var lassoDir = path.dirname(module.filename); var runner = 'phantomjsRunner.js'; var phantomRunnerFilename = path.join(path.dirname(module.filename), runner); console.assert(fs.existsSync(phantomRunnerFilename), 'could not find phantom runner', phantomRunnerFilename); options.coverageFilename = path.join(process.cwd(), 'cover.json'); var separatorRegex = new RegExp(regexpQuote(path.sep), 'g'); var pageUrl = 'http://localhost:' + options.port + '/' + options.page.replace(separatorRegex, '/'); console.log('page url to load', pageUrl); console.log('Opening in phantomjs page', pageUrl); console.log('output coverage filename', options.coverageFilename); var phantomArguments = [phantomRunnerFilename, pageUrl, options.coverageFilename]; if (options.verbose) { phantomArguments.push('--verbose'); } if (options.timeout) { phantomArguments.push('--timeout'); phantomArguments.push(options.timeout); } var phantomjs = spawn('phantomjs', phantomArguments); phantomjs.stdout.on('data', function (data) { console.log('phantomjs: ' + data); }); phantomjs.stderr.on('data', function (data) { console.log('phantomjs error: ' + data); }); phantomjs.on('exit', _.partial(processPhantomJsResults, options)); } function processPhantomJsResults(options, code) { console.log('phantomjs process exited with code ' + code); console.assert(fs.existsSync(options.coverageFilename), 'could not find coverage file', options.coverageFilename); console.log('generating detailed HTML coverage pages from', options.coverageFilename); var collector = new istanbul.Collector(); collector.add(JSON.parse(fs.readFileSync(options.coverageFilename, 'utf8'))); var reportFolder = path.join(process.cwd(), 'cover'); var report = Report.create('html', { dir: reportFolder, verbose: false }); report.writeReport(collector, true); console.log('wrote html coverage reports to', reportFolder); Report.create('text').writeReport(collector); Report.create('text-summary').writeReport(collector); Report.create('text', { file: 'cover.txt' }).writeReport(collector); console.log('saved coverage text report to', path.join(process.cwd(), 'cover.txt')); if (options.untested) { var coverageData = collector.getFinalCoverage(); console.assert(coverageData, 'could not get coverage data'); updateUntestedDb(coverageData, options); } process.exit(0); } function updateUntestedDb(coverageData, options) { console.assert(options.basedir, 'missing basedir'); console.assert(options.page, 'missing page address'); var full = path.join(options.basedir, options.page); var coverageSummary = untested.getCoverageSummary(coverageData); console.assert(coverageSummary, 'could not get coverage summary from\n', JSON.stringify(coverageData, null, 2)); untested.update({ test: full, coverage: coverageSummary }); } exports.run = run;