forked from jestjs/jest
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrunJest.js
65 lines (55 loc) · 2 KB
/
runJest.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
/**
* Copyright (c) 2014, Facebook, Inc. All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
const {fileExists} = require('./utils');
const path = require('path');
const spawnSync = require('child_process').spawnSync;
const JEST_PATH = path.resolve(__dirname, '../packages/jest-cli/bin/jest.js');
// return the result of the spawned proccess:
// [ 'status', 'signal', 'output', 'pid', 'stdout', 'stderr',
// 'envPairs', 'options', 'args', 'file' ]
function runJest(dir, args) {
const isRelative = dir[0] !== '/';
if (isRelative) {
dir = path.resolve(__dirname, dir);
}
const localPackageJson = path.resolve(dir, 'package.json');
if (!fileExists(localPackageJson)) {
throw new Error(`
Make sure you have a local package.json file at
"${localPackageJson}".
Otherwise Jest will try to traverse the directory tree and find the
the global package.json, which will send Jest into infinite loop.
`);
}
const result = spawnSync(JEST_PATH, args || [], {
cwd: dir,
});
result.stdout = result.stdout && result.stdout.toString();
result.stderr = result.stderr && result.stderr.toString();
return result;
}
// Runs `jest` with `--json` option and adds `json` property to the result obj.
// 'success', 'startTime', 'numTotalTests', 'numTotalTestSuites',
// 'numRuntimeErrorTestSuites', 'numPassedTests', 'numFailedTests',
// 'numPendingTests', 'testResults'
runJest.json = function(dir, args) {
args = Array.prototype.concat(args || [], '--json');
const result = runJest(dir, args);
try {
result.json = JSON.parse((result.stdout || '').toString());
} catch (e) {
throw new Error(`
Can't parse JSON.
ERROR: ${e.name} ${e.message}
STDOUT: ${result.stdout}
STDERR: ${result.stderr}
`);
}
return result;
};
module.exports = runJest;