-
Notifications
You must be signed in to change notification settings - Fork 12
/
runMocha.js
83 lines (72 loc) · 2.04 KB
/
runMocha.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
const Mocha = require('mocha');
const toTestResult = require('./utils/toTestResult');
const setupCollectCoverage = require('./utils/setupCollectCoverage');
const getMochaOptions = require('./utils/getMochaOptions');
const runMocha = ({ config, testPath, globalConfig }, workerCallback) => {
const { cliOptions: mochaOptions } = getMochaOptions(config);
class Reporter extends Mocha.reporters.Base {
constructor(runner) {
super(runner);
const tests = [];
const pending = [];
const failures = [];
const passes = [];
runner.on('test end', test => tests.push(test));
runner.on('pass', test => passes.push(test));
runner.on('fail', (test, err) => {
test.err = err;
failures.push(test);
});
runner.on('pending', test => pending.push(test));
runner.on('end', () => {
try {
workerCallback(
null,
toTestResult({
stats: this.stats,
tests,
pending,
failures,
passes,
coverage: global.__coverage__,
jestTestPath: testPath,
}),
);
} catch (e) {
workerCallback(e);
}
});
}
}
const mocha = new Mocha({
reporter: Reporter,
timeout: mochaOptions.timeout,
});
if (mochaOptions.compiler) {
// eslint-disable-next-line import/no-dynamic-require, global-require
require(mochaOptions.compiler);
}
setupCollectCoverage({
filename: testPath,
rootDir: config.rootDir,
collectCoverage: globalConfig.collectCoverage,
coveragePathIgnorePatterns: config.coveragePathIgnorePatterns,
});
if (mochaOptions.file) {
mochaOptions.file.forEach(file => mocha.addFile(file));
}
mocha.addFile(testPath);
const onEnd = () => {
process.on('exit', () => process.exit());
};
try {
if (mochaOptions.ui) {
mocha.ui(mochaOptions.ui).run(onEnd);
} else {
mocha.run(onEnd);
}
} catch (e) {
workerCallback(e);
}
};
module.exports = runMocha;