ava
Version:
Futuristic test runner 🚀
80 lines (66 loc) • 2.03 kB
JavaScript
;
var loudRejection = require('loud-rejection/api')(process);
var resolveFrom = require('resolve-from');
var createEspowerPlugin = require('babel-plugin-espower/create');
var requireFromString = require('require-from-string');
var serializeValue = require('./serialize-value');
var hasGenerators = parseInt(process.version.slice(1), 10) > 0;
var testPath = process.argv[2];
var babel;
try {
var localBabel = resolveFrom('.', 'babel-core') || resolveFrom('.', 'babel');
babel = require(localBabel);
} catch (err) {
babel = require('babel-core');
}
var options = {
blacklist: hasGenerators ? ['regenerator'] : [],
optional: hasGenerators ? ['asyncToGenerator', 'runtime'] : ['runtime'],
plugins: [
createEspowerPlugin(babel, {
patterns: require('./enhance-assert').PATTERNS
})
]
};
var avaRequired;
module.exports = {
avaRequired: function () {
avaRequired = true;
}
};
function send(name, data) {
process.send({name: name, data: data});
}
process.on('uncaughtException', function (exception) {
send('uncaughtException', {uncaughtException: serializeValue(exception)});
});
var transpiled = babel.transformFileSync(testPath, options);
requireFromString(transpiled.code, testPath, {
appendPaths: module.paths
});
if (!avaRequired) {
throw new Error('No tests found in ' + testPath + ', make sure to import "ava" at the top of your test file');
}
process.on('message', function (message) {
var command = message['ava-child-process-command'];
if (command) {
process.emit('ava-' + command, message.data);
}
});
process.on('ava-kill', function () {
setTimeout(function () {
process.exit(0);
}, process.env.AVA_APPVEYOR ? 100 : 0);
});
process.on('ava-cleanup', function () {
var unhandled = loudRejection.currentlyUnhandled();
if (unhandled.length) {
unhandled = unhandled.map(function (entry) {
return serializeValue(entry.reason);
});
send('unhandledRejections', {unhandledRejections: unhandled});
}
setTimeout(function () {
send('cleaned-up', {});
}, 100);
});