-
Notifications
You must be signed in to change notification settings - Fork 2.2k
/
jest.impl.ts
110 lines (94 loc) · 2.9 KB
/
jest.impl.ts
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import 'dotenv/config';
import { runCLI } from 'jest';
import * as path from 'path';
import { JestExecutorOptions } from './schema';
import { Config } from '@jest/types';
import { ExecutorContext } from '@nrwl/devkit';
process.env.NODE_ENV ??= 'test';
export async function jestExecutor(
options: JestExecutorOptions,
context: ExecutorContext
): Promise<{ success: boolean }> {
const config = jestConfigParser(options, context);
const { results } = await runCLI(config, [options.jestConfig]);
return { success: results.success };
}
export function jestConfigParser(
options: JestExecutorOptions,
context: ExecutorContext
): Config.Argv {
options.jestConfig = path.resolve(context.root, options.jestConfig);
const jestConfig: {
transform: any;
globals: any;
setupFilesAfterEnv: any;
// eslint-disable-next-line @typescript-eslint/no-var-requires
} = require(options.jestConfig);
const config: Config.Argv = {
$0: undefined,
_: [],
config: options.config,
coverage: options.codeCoverage,
bail: options.bail,
ci: options.ci,
color: options.color,
detectOpenHandles: options.detectOpenHandles,
json: options.json,
maxWorkers: options.maxWorkers,
onlyChanged: options.onlyChanged,
outputFile: options.outputFile,
passWithNoTests: options.passWithNoTests,
runInBand: options.runInBand,
showConfig: options.showConfig,
silent: options.silent,
testLocationInResults: options.testLocationInResults,
testNamePattern: options.testNamePattern,
testPathPattern: options.testPathPattern,
testTimeout: options.testTimeout,
colors: options.colors,
verbose: options.verbose,
testResultsProcessor: options.testResultsProcessor,
updateSnapshot: options.updateSnapshot,
useStderr: options.useStderr,
watch: options.watch,
watchAll: options.watchAll,
};
// for backwards compatibility
if (options.setupFile) {
const setupFilesAfterEnvSet = new Set([
...(jestConfig.setupFilesAfterEnv ?? []),
path.resolve(context.root, options.setupFile),
]);
config.setupFilesAfterEnv = Array.from(setupFilesAfterEnvSet);
}
if (options.testFile) {
config._.push(options.testFile);
}
if (options.findRelatedTests) {
const parsedTests = options.findRelatedTests
.split(',')
.map((s) => s.trim());
config._.push(...parsedTests);
config.findRelatedTests = true;
}
if (options.coverageDirectory) {
config.coverageDirectory = path.join(
context.root,
options.coverageDirectory
);
}
if (options.clearCache) {
config.clearCache = true;
}
if (options.reporters && options.reporters.length > 0) {
config.reporters = options.reporters;
}
if (
Array.isArray(options.coverageReporters) &&
options.coverageReporters.length > 0
) {
config.coverageReporters = options.coverageReporters;
}
return config;
}
export default jestExecutor;