107 lines
2.3 KiB
JavaScript
107 lines
2.3 KiB
JavaScript
'use strict';
|
|
|
|
var path = require('path')
|
|
, Mocha = require('mocha')
|
|
, argv = require('argh').argv
|
|
, mochify = require('mochify');
|
|
|
|
argv.reporter = argv.reporter || 'spec';
|
|
argv.ui = argv.ui || 'bdd';
|
|
argv.wd = argv.wd || false;
|
|
|
|
/**
|
|
* Poor mans kill switch. Kills all active hooks.
|
|
*
|
|
* @api private
|
|
*/
|
|
function kill() {
|
|
require('async-each')(kill.hooks, function each(fn, next) {
|
|
fn(next);
|
|
}, function done(err) {
|
|
if (err) return process.exit(1);
|
|
|
|
process.exit(0);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* All the hooks that need destruction.
|
|
*
|
|
* @type {Array}
|
|
* @private
|
|
*/
|
|
kill.hooks = [];
|
|
|
|
//
|
|
// This is the magical test runner that setup's all the things and runs various
|
|
// of test suites until something starts failing.
|
|
//
|
|
(function runner(steps) {
|
|
if (!steps.length) return kill(), runner;
|
|
|
|
var step = steps.shift();
|
|
|
|
step(function unregister(fn) {
|
|
kill.hooks.push(fn);
|
|
}, function register(err) {
|
|
if (err) throw err;
|
|
|
|
runner(steps);
|
|
});
|
|
|
|
return runner;
|
|
})([
|
|
//
|
|
// Run the normal node tests.
|
|
//
|
|
function creamy(kill, next) {
|
|
var mocha = new Mocha();
|
|
|
|
mocha.reporter(argv.reporter);
|
|
mocha.ui(argv.ui);
|
|
|
|
//
|
|
// The next bulk of logic is required to correctly glob and lookup all the
|
|
// files required for testing.
|
|
//
|
|
mocha.files = [
|
|
'./test/*.test.js'
|
|
].map(function lookup(glob) {
|
|
return Mocha.utils.lookupFiles(glob, ['js']);
|
|
}).reduce(function flatten(arr, what) {
|
|
Array.prototype.push.apply(arr, what);
|
|
return arr;
|
|
}, []).map(function resolve(file) {
|
|
return path.resolve(file);
|
|
});
|
|
|
|
//
|
|
// Run the mocha test suite inside this node process with a custom callback
|
|
// so we don't accidentally exit the process and forget to run the test of the
|
|
// tests.
|
|
//
|
|
mocha.run(function ran(err) {
|
|
if (err) err = new Error('Something failed in the mocha test suite');
|
|
next(err);
|
|
});
|
|
},
|
|
|
|
//
|
|
// Start-up a small static file server so we can download files and fixtures
|
|
// inside our PhantomJS test.
|
|
//
|
|
require('./static'),
|
|
|
|
//
|
|
// Run the PhantomJS tests now that we have a small static server setup.
|
|
//
|
|
function phantomjs(kill, next) {
|
|
mochify('./test/*.browser.js', {
|
|
reporter: argv.reporter,
|
|
cover: argv.cover,
|
|
wd: argv.wd,
|
|
ui: argv.ui
|
|
})
|
|
.bundle(next);
|
|
}
|
|
]);
|