UNPKG

1.97 kBJavaScriptView Raw
1'use strict';
2require('./lib/babel').avaRequired();
3var setImmediate = require('set-immediate-shim');
4var hasFlag = require('has-flag');
5var chalk = require('chalk');
6var relative = require('path').relative;
7var serializeError = require('./lib/serialize-value');
8var Runner = require('./lib/runner');
9var log = require('./lib/logger');
10var runner = new Runner();
11
12// check if the test is being run without AVA cli
13var isForked = typeof process.send === 'function';
14
15if (!isForked) {
16 var path = relative('.', process.argv[1]);
17
18 log.write();
19 log.error('Test files must be run with the AVA CLI:\n\n ' + chalk.grey.dim('$') + ' ' + chalk.cyan('ava ' + path) + '\n');
20
21 process.exit(1);
22}
23
24// if fail-fast is enabled, use this variable to detect,
25// that no more tests should be logged
26var isFailed = false;
27
28Error.stackTraceLimit = Infinity;
29
30function test(props) {
31 if (isFailed) {
32 return;
33 }
34
35 // don't display anything, if it's a passed hook
36 if (!props.error && props.type !== 'test') {
37 return;
38 }
39
40 props.error = props.error ? serializeError(props.error) : {};
41
42 process.send({
43 name: 'test',
44 data: props
45 });
46
47 if (props.error && hasFlag('fail-fast')) {
48 isFailed = true;
49 exit();
50 }
51}
52
53function exit() {
54 // serialize errors
55 runner.results.forEach(function (result) {
56 if (result.error) {
57 result.error = serializeError(result.error);
58 }
59 });
60
61 process.send({
62 name: 'results',
63 data: {
64 stats: runner.stats,
65 tests: runner.results
66 }
67 });
68}
69
70setImmediate(function () {
71 runner.on('test', test);
72 runner.run().then(exit);
73});
74
75module.exports = runner.addTest.bind(runner);
76module.exports.serial = runner.addSerialTest.bind(runner);
77module.exports.before = runner.addBeforeHook.bind(runner);
78module.exports.after = runner.addAfterHook.bind(runner);
79module.exports.beforeEach = runner.addBeforeEachHook.bind(runner);
80module.exports.afterEach = runner.addAfterEachHook.bind(runner);
81module.exports.skip = runner.addSkippedTest.bind(runner);