UNPKG

kab

Version:

Know About Better - test your code

132 lines (102 loc) 3.65 kB
/** * @file jasmine-node 代理 * @author chris<wfsr@foxmail.com> */ var fs = require('fs'); var path = require('path'); var edp = require('edp-core'); var util = require('./util'); var TEST_DIR = 'test'; var JASMINE_MAP = (function () { var map = {valid: []}; function detect(dirpath) { dirpath = path.resolve(dirpath, 'jasmine-node'); if (fs.existsSync(dirpath)) { var pkg = require(path.resolve(dirpath, 'package.json')); var version = pkg.version; var versions = version.split('.'); map[dirpath] = version; map[version] = map[version] || dirpath; map[versions[0]] = map[versions[0]] || dirpath; map.valid.push(dirpath); } } [ path.resolve(process.cwd(), 'node_modules'), path.resolve(__dirname, '..', 'node_modules'), process.env.NODE_PATH ].forEach(detect); return map; })(); var jasmines = { istanbul: function (version, config) { require('istanbul/lib/register-plugins'); var cover = require('istanbul/lib/command').create('cover'); var args = ['--print', 'none']; var reporter = config.coverageReporter || {}; (reporter.type || 'text|html').split('|').forEach(function (report) { args.push('--report', report); }); if (reporter.dir) { args.push('--dir', reporter.dir); } (reporter.exclude || []).forEach(function (pattern) { args.push('-x', pattern); }); args.push(path.resolve(JASMINE_MAP[version], 'bin/jasmine-node'), '--captureExceptions'); args.push.apply(args, edp.glob.sync([TEST_DIR + '/**/*{s,S}pec.js'], {nodir: true})); cover.run(args, function (err) { process.exit(err ? 1 : 0); }); }, 1: { debug: function (config) { var jasmine = require(JASMINE_MAP[1]); var onComplete = function (runner, log) { process.stdout.write('\n'); if (config.singleRun) { process.exit(runner.results().failedCount ? 1 : 0); } }; var options = { specFolders: [TEST_DIR], onComplete: onComplete, isVerbose: false, showColors: true, teamcity: false, useRequireJs: false, junitreport: false, includeStackTrace: true, growl: true }; jasmine.executeSpecsInFolder(options); }, cover: function (config) { jasmines.istanbul(1, config); } }, 2: { debug: function (config) { var jasmine = require(JASMINE_MAP[2]); var options = util.mix(jasmine.defaults, { forceExit: config.singleRun, watchFolders: config.watch ? [TEST_DIR] : [], specFolders: [TEST_DIR] }); jasmine.run(options); }, cover: function (config) { jasmines.istanbul(2, config); } } }; exports.run = function (config) { var version = config.jasmine || !config.noUserConfig && (config.frameworks || []).map(function (name) { return name.indexOf('jasmine') === 0 ? (name.slice(7) || 1) : 0; })[0] || (JASMINE_MAP[JASMINE_MAP.valid[0]] || '').split('.')[0]; var jasmine = jasmines[version]; if (!jasmine) { throw new Error('Invalid jasmine version: ' + version); } jasmine[config.debug ? 'debug' : 'cover'](config); };