UNPKG

3.79 kBJavaScriptView Raw
1require('@babel/register'); // to be able to use non-transpiled '@kiwicom/monorepo-utils' here
2
3
4var _require = require('create-jest-runner'),
5 pass = _require.pass,
6 fail = _require.fail,
7 skip = _require.skip;
8
9var CLIEngine = require('eslint').CLIEngine;
10
11var isCI = require('is-ci');
12
13var _require2 = require('@kiwicom/monorepo-utils'),
14 Git = _require2.Git;
15
16var formatter = require('./stylish');
17
18var isEslintConfigFile = require('./isEslintConfigFile');
19
20var PERFORM_FIXES = isCI === false;
21var cliEngine = new CLIEngine({
22 fix: PERFORM_FIXES,
23 reportUnusedDisableDirectives: true
24});
25// TODO: we should eventually get rid of 'create-jest-runner' dependency and use our own
26// implementation with this built-in mechanism. This way we don't have to iterate all the files
27// and skipping them.
28var changedFiles = Git.getChangesToTest();
29
30module.exports = function (_ref) {
31 var testPath = _ref.testPath,
32 extraOptions = _ref.extraOptions;
33 var start = Date.now();
34 var runAll = extraOptions.runAll;
35 var _iteratorNormalCompletion = true;
36 var _didIteratorError = false;
37 var _iteratorError = undefined;
38
39 try {
40 for (var _iterator = changedFiles[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
41 var changedFile = _step.value;
42
43 if (isEslintConfigFile(changedFile)) {
44 runAll = true;
45 break;
46 }
47 }
48 } catch (err) {
49 _didIteratorError = true;
50 _iteratorError = err;
51 } finally {
52 try {
53 if (!_iteratorNormalCompletion && _iterator.return != null) {
54 _iterator.return();
55 }
56 } finally {
57 if (_didIteratorError) {
58 throw _iteratorError;
59 }
60 }
61 }
62
63 if (cliEngine.isPathIgnored(testPath)) {
64 return skip({
65 start: start,
66 end: start,
67 test: {
68 path: testPath
69 }
70 });
71 }
72
73 if (runAll === false) {
74 var normalizedPath = testPath.replace(process.cwd(), '').replace(/^\//, '');
75
76 if (changedFiles.includes(normalizedPath) === false) {
77 return skip({
78 start: start,
79 end: start,
80 test: {
81 path: testPath
82 }
83 });
84 }
85 }
86
87 var report = cliEngine.executeOnFiles([testPath]);
88
89 if (PERFORM_FIXES) {
90 CLIEngine.outputFixes(report);
91 }
92
93 var end = Date.now();
94 var result = report.results[0];
95
96 if (result.errorCount === 0 && result.warningCount > 0) {
97 return passWithWarning({
98 start: start,
99 end: end,
100 test: {
101 path: testPath,
102 warningMessage: formatter(report.results)
103 }
104 });
105 } else if (result.errorCount > 0) {
106 return fail({
107 start: start,
108 end: end,
109 test: {
110 path: testPath,
111 errorMessage: formatter(report.results)
112 }
113 });
114 }
115
116 return pass({
117 start: start,
118 end: end,
119 test: {
120 path: testPath
121 }
122 });
123};
124
125function passWithWarning(_ref2) {
126 var start = _ref2.start,
127 end = _ref2.end,
128 test = _ref2.test;
129 return {
130 console: null,
131 failureMessage: test.warningMessage,
132 numFailingTests: 0,
133 numPassingTests: 1,
134 numPendingTests: 0,
135 numTodoTests: 0,
136 perfStats: {
137 end: new Date(start).getTime(),
138 start: new Date(end).getTime()
139 },
140 skipped: false,
141 snapshot: {
142 added: 0,
143 fileDeleted: false,
144 matched: 0,
145 unchecked: 0,
146 unmatched: 0,
147 updated: 0
148 },
149 sourceMaps: {},
150 testExecError: null,
151 testFilePath: test.path,
152 testResults: [{
153 ancestorTitles: [],
154 duration: end - start,
155 failureMessages: [test.warningMessage],
156 fullName: test.path,
157 numPassingAsserts: test.warningMessage ? 1 : 0,
158 status: test.warningMessage ? 'failed' : 'passed',
159 title: ''
160 }]
161 };
162}
\No newline at end of file