@teambit/jest 0.0.656 → 0.0.659

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- export const compositions = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.defender_jest@0.0.656/dist/jest.composition.js')]
1
+ export const compositions = [require('/home/circleci/Library/Caches/Bit/capsules/8891be5ad3d35bfc38b9cd90c0e05b598a5a55af/teambit.defender_jest@0.0.659/dist/jest.composition.js')]
@@ -2,8 +2,12 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
+ require("core-js/modules/es.array.flat.js");
6
+
5
7
  require("core-js/modules/es.array.iterator.js");
6
8
 
9
+ require("core-js/modules/es.array.unscopables.flat.js");
10
+
7
11
  require("core-js/modules/es.promise.js");
8
12
 
9
13
  Object.defineProperty(exports, "__esModule", {
@@ -154,11 +158,10 @@ class JestTester {
154
158
 
155
159
  buildTestsObj(aggregatedResult, components, testerContext, config) {
156
160
  const testsSuiteResult = components.toArray().map(([component, testsFiles]) => {
157
- if (!testsFiles) return;
158
- if ((testsFiles === null || testsFiles === void 0 ? void 0 : testsFiles.length) === 0) return;
161
+ if (!testsFiles) return undefined;
162
+ if ((testsFiles === null || testsFiles === void 0 ? void 0 : testsFiles.length) === 0) return undefined;
163
+ const errors = this.getErrors(testsFiles);
159
164
  const tests = testsFiles.map(test => {
160
- var _test$testExecError;
161
-
162
165
  const file = new (_sources().AbstractVinyl)({
163
166
  path: test.testFilePath,
164
167
  contents: (0, _fsExtra().readFileSync)(test.testFilePath)
@@ -171,17 +174,29 @@ class JestTester {
171
174
  return new (_testsResults().TestResult)(testResult.ancestorTitles, testResult.title, testResult.status, testResult.duration, isFailure ? undefined : error, isFailure ? error : undefined);
172
175
  });
173
176
  const filePath = (file === null || file === void 0 ? void 0 : file.basename) || test.testFilePath;
174
- const error = {
175
- failureMessage: test.testExecError ? test.failureMessage : undefined,
176
- error: (_test$testExecError = test.testExecError) === null || _test$testExecError === void 0 ? void 0 : _test$testExecError.message
177
+
178
+ const getError = () => {
179
+ var _test$testExecError, _test$testExecError2;
180
+
181
+ if (!test.testExecError) return undefined;
182
+
183
+ if (testerContext.watch) {
184
+ // for some reason, during watch ('bit start'), if a file has an error, the `test.testExecError` is `{}`
185
+ // (an empty object). the failureMessage contains the stringified error.
186
+ // @todo: consider to always use the failureMessage, regardless the context.watch.
187
+ return new (_error().JestError)(test.failureMessage);
188
+ }
189
+
190
+ return new (_error().JestError)((_test$testExecError = test.testExecError) === null || _test$testExecError === void 0 ? void 0 : _test$testExecError.message, (_test$testExecError2 = test.testExecError) === null || _test$testExecError2 === void 0 ? void 0 : _test$testExecError2.stack);
177
191
  };
178
- return new (_testsResults().TestsFiles)(filePath, testResults, test.numPassingTests, test.numFailingTests, test.numPendingTests, test.perfStats.runtime, test.perfStats.slow, error);
179
- }); // TODO @guy - fix this eslint error
180
- // eslint-disable-next-line
181
192
 
193
+ const error = getError();
194
+ return new (_testsResults().TestsFiles)(filePath, testResults, test.numPassingTests, test.numFailingTests, test.numPendingTests, test.perfStats.runtime, test.perfStats.slow, error);
195
+ });
182
196
  return {
183
197
  componentId: component.id,
184
- results: new (_testsResults().TestsResult)(tests, aggregatedResult.success, aggregatedResult.startTime)
198
+ results: new (_testsResults().TestsResult)(tests, aggregatedResult.success, aggregatedResult.startTime),
199
+ errors
185
200
  };
186
201
  });
187
202
  return (0, _lodash().compact)(testsSuiteResult);
@@ -197,9 +212,7 @@ class JestTester {
197
212
  type
198
213
  } = test.testExecError;
199
214
  errors.push(new (_error().JestError)(message, stack, code, type));
200
- }
201
-
202
- if (test.failureMessage) {
215
+ } else if (test.failureMessage) {
203
216
  errors.push(new (_error().JestError)(test.failureMessage));
204
217
  }
205
218
 
@@ -236,26 +249,15 @@ class JestTester {
236
249
  testMatch: this.patternsToArray(context.patterns)
237
250
  });
238
251
  const withEnv = Object.assign(jestConfigWithSpecs, config);
239
-
240
- try {
241
- const testsOutPut = await this.jestModule.runCLI(withEnv, [this.jestConfig]);
242
- const testResults = testsOutPut.results.testResults;
243
- const componentsWithTests = this.attachTestsToComponent(context, testResults);
244
- const componentTestResults = this.buildTestsObj(testsOutPut.results, componentsWithTests, context, jestConfigWithSpecs);
245
- const globalErrors = this.getErrors(testResults);
246
- return {
247
- components: componentTestResults,
248
- errors: globalErrors
249
- };
250
- } catch (e) {
251
- const components = context.components.map(comp => ({
252
- componentId: comp.id
253
- }));
254
- return {
255
- components,
256
- errors: [e]
257
- };
258
- }
252
+ const testsOutPut = await this.jestModule.runCLI(withEnv, [this.jestConfig]);
253
+ const testResults = testsOutPut.results.testResults;
254
+ const componentsWithTests = this.attachTestsToComponent(context, testResults);
255
+ const componentTestResults = this.buildTestsObj(testsOutPut.results, componentsWithTests, context, jestConfigWithSpecs);
256
+ const allErrors = componentTestResults.map(comp => comp.errors || []).flat();
257
+ return {
258
+ components: componentTestResults,
259
+ errors: allErrors
260
+ };
259
261
  }
260
262
 
261
263
  async watch(context) {
@@ -1 +1 @@
1
- {"version":3,"sources":["jest.tester.ts"],"names":["JestTester","constructor","id","jestConfig","jestModulePath","jestWorker","logger","jestModule","require","displayConfig","version","getVersion","attachTestsToComponent","testerContext","testResult","ComponentMap","as","components","component","componentSpecFiles","patterns","get","undefined","specs","filter","test","pattern","testFilePath","path","length","buildTestsObj","aggregatedResult","config","testsSuiteResult","toArray","map","testsFiles","tests","file","AbstractVinyl","contents","testResults","error","noStackTrace","isFailure","status","TestResult","ancestorTitles","title","duration","filePath","basename","failureMessage","testExecError","message","TestsFiles","numPassingTests","numFailingTests","numPendingTests","perfStats","runtime","slow","componentId","results","TestsResult","success","startTime","getErrors","reduce","errors","stack","code","type","push","JestError","onTestRunComplete","callback","_callback","context","rootDir","rootPath","console","warn","debug","runInBand","coverage","watch","watchAll","noCache","jestConfigWithSpecs","Object","assign","testMatch","patternsToArray","withEnv","testsOutPut","runCLI","componentsWithTests","componentTestResults","globalErrors","e","comp","Promise","resolve","workerApi","initiate","ui","stdout","stderr","stdin","cbFn","watchTestResults","loading","onTestComplete","err","p"],"mappings":"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","sourcesContent":["import { readFileSync } from 'fs-extra';\nimport minimatch from 'minimatch';\nimport { compact, flatten } from 'lodash';\nimport { proxy } from 'comlink';\nimport { Logger } from '@teambit/logger';\nimport { HarmonyWorker } from '@teambit/worker';\nimport { Tester, CallbackFn, TesterContext, Tests, ComponentPatternsMap } from '@teambit/tester';\nimport { TestsFiles, TestResult, TestsResult } from '@teambit/tests-results';\nimport { TestResult as JestTestResult, AggregatedResult } from '@jest/test-result';\nimport { formatResultsErrors } from 'jest-message-util';\nimport { ComponentMap, ComponentID } from '@teambit/component';\nimport { AbstractVinyl } from '@teambit/legacy/dist/consumer/component/sources';\nimport type jest from 'jest';\nimport { JestError } from './error';\nimport type { JestWorker } from './jest.worker';\n\nexport class JestTester implements Tester {\n private readonly jestModule: typeof jest;\n\n constructor(\n readonly id: string,\n readonly jestConfig: any,\n private jestModulePath: string,\n private jestWorker: HarmonyWorker<JestWorker>,\n private logger: Logger\n ) {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n this.jestModule = require(jestModulePath);\n }\n\n configPath = this.jestConfig;\n\n displayName = 'Jest';\n\n _callback: CallbackFn | undefined;\n\n displayConfig() {\n return readFileSync(this.jestConfig, 'utf8');\n }\n\n version() {\n return this.jestModule.getVersion();\n }\n\n // private getTestFile(path: string, testerContext: TesterContext): AbstractVinyl | undefined {\n // return testerContext.specFiles.toArray().reduce((acc: AbstractVinyl | undefined, [, specs]) => {\n // const file = specs.find((spec) => spec.path === path);\n // if (file) acc = file;\n // return acc;\n // }, undefined);\n // }\n\n private attachTestsToComponent(testerContext: TesterContext, testResult: JestTestResult[]) {\n return ComponentMap.as(testerContext.components, (component) => {\n const componentSpecFiles = testerContext.patterns.get(component);\n if (!componentSpecFiles) return undefined;\n const [, specs] = componentSpecFiles;\n return testResult.filter((test) => {\n return specs.filter((pattern) => minimatch(test.testFilePath, pattern.path)).length > 0;\n });\n });\n }\n\n private buildTestsObj(\n aggregatedResult: AggregatedResult,\n components: ComponentMap<JestTestResult[] | undefined>,\n testerContext: TesterContext,\n config?: any\n ) {\n const testsSuiteResult = components.toArray().map(([component, testsFiles]) => {\n if (!testsFiles) return;\n if (testsFiles?.length === 0) return;\n const tests = testsFiles.map((test) => {\n const file = new AbstractVinyl({ path: test.testFilePath, contents: readFileSync(test.testFilePath) });\n const testResults = test.testResults.map((testResult) => {\n const error = formatResultsErrors([testResult], config, { noStackTrace: true }) || undefined;\n const isFailure = testResult.status === 'failed';\n return new TestResult(\n testResult.ancestorTitles,\n testResult.title,\n testResult.status,\n testResult.duration,\n isFailure ? undefined : error,\n isFailure ? error : undefined\n );\n });\n const filePath = file?.basename || test.testFilePath;\n const error = {\n failureMessage: test.testExecError ? test.failureMessage : undefined,\n error: test.testExecError?.message,\n };\n return new TestsFiles(\n filePath,\n testResults,\n test.numPassingTests,\n test.numFailingTests,\n test.numPendingTests,\n test.perfStats.runtime,\n test.perfStats.slow,\n error\n );\n });\n // TODO @guy - fix this eslint error\n // eslint-disable-next-line\n return {\n componentId: component.id,\n results: new TestsResult(tests, aggregatedResult.success, aggregatedResult.startTime),\n };\n });\n\n return compact(testsSuiteResult) as { componentId: ComponentID; results: TestsResult }[];\n }\n\n private getErrors(testResult: JestTestResult[]): JestError[] {\n return testResult.reduce((errors: JestError[], test) => {\n if (test.testExecError) {\n const { message, stack, code, type } = test.testExecError;\n errors.push(new JestError(message, stack, code, type));\n }\n if (test.failureMessage) {\n errors.push(new JestError(test.failureMessage));\n }\n return errors;\n }, []);\n }\n\n async onTestRunComplete(callback: CallbackFn) {\n this._callback = callback;\n }\n\n async test(context: TesterContext): Promise<Tests> {\n const config: any = {\n rootDir: context.rootPath,\n };\n\n // eslint-disable-next-line no-console\n console.warn = (message: string) => {\n this.logger.warn(message);\n };\n\n if (context.debug) config.runInBand = true;\n if (context.coverage) config.coverage = true;\n config.runInBand = true;\n\n if (context.watch) {\n config.watchAll = true;\n config.noCache = true;\n }\n // eslint-disable-next-line global-require,import/no-dynamic-require\n const jestConfig = require(this.jestConfig);\n\n const jestConfigWithSpecs = Object.assign(jestConfig, {\n testMatch: this.patternsToArray(context.patterns),\n });\n\n const withEnv = Object.assign(jestConfigWithSpecs, config);\n try {\n const testsOutPut = await this.jestModule.runCLI(withEnv, [this.jestConfig]);\n const testResults = testsOutPut.results.testResults;\n const componentsWithTests = this.attachTestsToComponent(context, testResults);\n const componentTestResults = this.buildTestsObj(\n testsOutPut.results,\n componentsWithTests,\n context,\n jestConfigWithSpecs\n );\n const globalErrors = this.getErrors(testResults);\n return { components: componentTestResults, errors: globalErrors };\n } catch (e) {\n const components = context.components.map((comp) => ({ componentId: comp.id }));\n return { components, errors: [e as Error] };\n }\n }\n\n async watch(context: TesterContext): Promise<Tests> {\n // eslint-disable-next-line\n return new Promise(async (resolve) => {\n const workerApi = this.jestWorker.initiate(\n context.ui ? { stdout: true, stderr: true, stdin: true } : { stdout: false, stderr: false, stdin: false }\n );\n\n // eslint-disable-next-line\n const jestConfig = require(this.jestConfig);\n\n const jestConfigWithSpecs = Object.assign(jestConfig, {\n testMatch: this.patternsToArray(context.patterns),\n });\n\n try {\n const cbFn = proxy((results) => {\n if (!this._callback) return;\n const testResults = results.testResults;\n const componentsWithTests = this.attachTestsToComponent(context, testResults);\n const componentTestResults = this.buildTestsObj(results, componentsWithTests, context, jestConfigWithSpecs);\n const globalErrors = this.getErrors(testResults);\n const watchTestResults = {\n loading: false,\n errors: globalErrors,\n components: componentTestResults,\n };\n this._callback(watchTestResults);\n resolve(watchTestResults);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n await workerApi.onTestComplete(cbFn);\n\n await workerApi.watch(\n this.jestConfig,\n this.patternsToArray(context.patterns),\n context.rootPath,\n this.jestModulePath\n );\n } catch (err: any) {\n this.logger.error('jest.tester.watch() caught an error', err);\n }\n });\n }\n\n private patternsToArray(patterns: ComponentPatternsMap) {\n return flatten(patterns.toArray().map(([, pattern]) => pattern.map((p) => p.path)));\n }\n}\n"]}
1
+ {"version":3,"sources":["jest.tester.ts"],"names":["JestTester","constructor","id","jestConfig","jestModulePath","jestWorker","logger","jestModule","require","displayConfig","version","getVersion","attachTestsToComponent","testerContext","testResult","ComponentMap","as","components","component","componentSpecFiles","patterns","get","undefined","specs","filter","test","pattern","testFilePath","path","length","buildTestsObj","aggregatedResult","config","testsSuiteResult","toArray","map","testsFiles","errors","getErrors","tests","file","AbstractVinyl","contents","testResults","error","noStackTrace","isFailure","status","TestResult","ancestorTitles","title","duration","filePath","basename","getError","testExecError","watch","JestError","failureMessage","message","stack","TestsFiles","numPassingTests","numFailingTests","numPendingTests","perfStats","runtime","slow","componentId","results","TestsResult","success","startTime","reduce","code","type","push","onTestRunComplete","callback","_callback","context","rootDir","rootPath","console","warn","debug","runInBand","coverage","watchAll","noCache","jestConfigWithSpecs","Object","assign","testMatch","patternsToArray","withEnv","testsOutPut","runCLI","componentsWithTests","componentTestResults","allErrors","comp","flat","Promise","resolve","workerApi","initiate","ui","stdout","stderr","stdin","cbFn","globalErrors","watchTestResults","loading","onTestComplete","err","p"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAIA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGO,MAAMA,UAAN,CAAmC;AAGxCC,EAAAA,WAAW,CACAC,EADA,EAEAC,UAFA,EAGDC,cAHC,EAIDC,UAJC,EAKDC,MALC,EAMT;AAAA,SALSJ,EAKT,GALSA,EAKT;AAAA,SAJSC,UAIT,GAJSA,UAIT;AAAA,SAHQC,cAGR,GAHQA,cAGR;AAAA,SAFQC,UAER,GAFQA,UAER;AAAA,SADQC,MACR,GADQA,MACR;AAAA;AAAA,wDAKW,KAAKH,UALhB;AAAA,yDAOY,MAPZ;AAAA;AACA;AACA,SAAKI,UAAL,GAAkBC,OAAO,CAACJ,cAAD,CAAzB;AACD;;AAQDK,EAAAA,aAAa,GAAG;AACd,WAAO,6BAAa,KAAKN,UAAlB,EAA8B,MAA9B,CAAP;AACD;;AAEDO,EAAAA,OAAO,GAAG;AACR,WAAO,KAAKH,UAAL,CAAgBI,UAAhB,EAAP;AACD,GA1BuC,CA4BxC;AACA;AACA;AACA;AACA;AACA;AACA;;;AAEQC,EAAAA,sBAAsB,CAACC,aAAD,EAA+BC,UAA/B,EAA6D;AACzF,WAAOC,0BAAaC,EAAb,CAAgBH,aAAa,CAACI,UAA9B,EAA2CC,SAAD,IAAe;AAC9D,YAAMC,kBAAkB,GAAGN,aAAa,CAACO,QAAd,CAAuBC,GAAvB,CAA2BH,SAA3B,CAA3B;AACA,UAAI,CAACC,kBAAL,EAAyB,OAAOG,SAAP;AACzB,YAAM,GAAGC,KAAH,IAAYJ,kBAAlB;AACA,aAAOL,UAAU,CAACU,MAAX,CAAmBC,IAAD,IAAU;AACjC,eAAOF,KAAK,CAACC,MAAN,CAAcE,OAAD,IAAa,0BAAUD,IAAI,CAACE,YAAf,EAA6BD,OAAO,CAACE,IAArC,CAA1B,EAAsEC,MAAtE,GAA+E,CAAtF;AACD,OAFM,CAAP;AAGD,KAPM,CAAP;AAQD;;AAEOC,EAAAA,aAAa,CACnBC,gBADmB,EAEnBd,UAFmB,EAGnBJ,aAHmB,EAInBmB,MAJmB,EAKE;AACrB,UAAMC,gBAAgB,GAAGhB,UAAU,CAACiB,OAAX,GAAqBC,GAArB,CAAyB,CAAC,CAACjB,SAAD,EAAYkB,UAAZ,CAAD,KAA6B;AAC7E,UAAI,CAACA,UAAL,EAAiB,OAAOd,SAAP;AACjB,UAAI,CAAAc,UAAU,SAAV,IAAAA,UAAU,WAAV,YAAAA,UAAU,CAAEP,MAAZ,MAAuB,CAA3B,EAA8B,OAAOP,SAAP;AAC9B,YAAMe,MAAM,GAAG,KAAKC,SAAL,CAAeF,UAAf,CAAf;AACA,YAAMG,KAAK,GAAGH,UAAU,CAACD,GAAX,CAAgBV,IAAD,IAAU;AACrC,cAAMe,IAAI,GAAG,KAAIC,wBAAJ,EAAkB;AAAEb,UAAAA,IAAI,EAAEH,IAAI,CAACE,YAAb;AAA2Be,UAAAA,QAAQ,EAAE,6BAAajB,IAAI,CAACE,YAAlB;AAArC,SAAlB,CAAb;AACA,cAAMgB,WAAW,GAAGlB,IAAI,CAACkB,WAAL,CAAiBR,GAAjB,CAAsBrB,UAAD,IAAgB;AACvD,gBAAM8B,KAAK,GAAG,4CAAoB,CAAC9B,UAAD,CAApB,EAAkCkB,MAAlC,EAA0C;AAAEa,YAAAA,YAAY,EAAE;AAAhB,WAA1C,KAAqEvB,SAAnF;AACA,gBAAMwB,SAAS,GAAGhC,UAAU,CAACiC,MAAX,KAAsB,QAAxC;AACA,iBAAO,KAAIC,0BAAJ,EACLlC,UAAU,CAACmC,cADN,EAELnC,UAAU,CAACoC,KAFN,EAGLpC,UAAU,CAACiC,MAHN,EAILjC,UAAU,CAACqC,QAJN,EAKLL,SAAS,GAAGxB,SAAH,GAAesB,KALnB,EAMLE,SAAS,GAAGF,KAAH,GAAWtB,SANf,CAAP;AAQD,SAXmB,CAApB;AAYA,cAAM8B,QAAQ,GAAG,CAAAZ,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAEa,QAAN,KAAkB5B,IAAI,CAACE,YAAxC;;AACA,cAAM2B,QAAQ,GAAG,MAAM;AAAA;;AACrB,cAAI,CAAC7B,IAAI,CAAC8B,aAAV,EAAyB,OAAOjC,SAAP;;AACzB,cAAIT,aAAa,CAAC2C,KAAlB,EAAyB;AACvB;AACA;AACA;AACA,mBAAO,KAAIC,kBAAJ,EAAchC,IAAI,CAACiC,cAAnB,CAAP;AACD;;AACD,iBAAO,KAAID,kBAAJ,yBAAchC,IAAI,CAAC8B,aAAnB,wDAAc,oBAAoBI,OAAlC,0BAA2ClC,IAAI,CAAC8B,aAAhD,yDAA2C,qBAAoBK,KAA/D,CAAP;AACD,SATD;;AAUA,cAAMhB,KAAK,GAAGU,QAAQ,EAAtB;AACA,eAAO,KAAIO,0BAAJ,EACLT,QADK,EAELT,WAFK,EAGLlB,IAAI,CAACqC,eAHA,EAILrC,IAAI,CAACsC,eAJA,EAKLtC,IAAI,CAACuC,eALA,EAMLvC,IAAI,CAACwC,SAAL,CAAeC,OANV,EAOLzC,IAAI,CAACwC,SAAL,CAAeE,IAPV,EAQLvB,KARK,CAAP;AAUD,OApCa,CAAd;AAqCA,aAAO;AACLwB,QAAAA,WAAW,EAAElD,SAAS,CAAChB,EADlB;AAELmE,QAAAA,OAAO,EAAE,KAAIC,2BAAJ,EAAgB/B,KAAhB,EAAuBR,gBAAgB,CAACwC,OAAxC,EAAiDxC,gBAAgB,CAACyC,SAAlE,CAFJ;AAGLnC,QAAAA;AAHK,OAAP;AAKD,KA9CwB,CAAzB;AAgDA,WAAO,uBAAQJ,gBAAR,CAAP;AACD;;AAEOK,EAAAA,SAAS,CAACxB,UAAD,EAA4C;AAC3D,WAAOA,UAAU,CAAC2D,MAAX,CAAkB,CAACpC,MAAD,EAAsBZ,IAAtB,KAA+B;AACtD,UAAIA,IAAI,CAAC8B,aAAT,EAAwB;AACtB,cAAM;AAAEI,UAAAA,OAAF;AAAWC,UAAAA,KAAX;AAAkBc,UAAAA,IAAlB;AAAwBC,UAAAA;AAAxB,YAAiClD,IAAI,CAAC8B,aAA5C;AACAlB,QAAAA,MAAM,CAACuC,IAAP,CAAY,KAAInB,kBAAJ,EAAcE,OAAd,EAAuBC,KAAvB,EAA8Bc,IAA9B,EAAoCC,IAApC,CAAZ;AACD,OAHD,MAGO,IAAIlD,IAAI,CAACiC,cAAT,EAAyB;AAC9BrB,QAAAA,MAAM,CAACuC,IAAP,CAAY,KAAInB,kBAAJ,EAAchC,IAAI,CAACiC,cAAnB,CAAZ;AACD;;AACD,aAAOrB,MAAP;AACD,KARM,EAQJ,EARI,CAAP;AASD;;AAEsB,QAAjBwC,iBAAiB,CAACC,QAAD,EAAuB;AAC5C,SAAKC,SAAL,GAAiBD,QAAjB;AACD;;AAES,QAAJrD,IAAI,CAACuD,OAAD,EAAyC;AACjD,UAAMhD,MAAW,GAAG;AAClBiD,MAAAA,OAAO,EAAED,OAAO,CAACE;AADC,KAApB,CADiD,CAKjD;;AACAC,IAAAA,OAAO,CAACC,IAAR,GAAgBzB,OAAD,IAAqB;AAClC,WAAKrD,MAAL,CAAY8E,IAAZ,CAAiBzB,OAAjB;AACD,KAFD;;AAIA,QAAIqB,OAAO,CAACK,KAAZ,EAAmBrD,MAAM,CAACsD,SAAP,GAAmB,IAAnB;AACnB,QAAIN,OAAO,CAACO,QAAZ,EAAsBvD,MAAM,CAACuD,QAAP,GAAkB,IAAlB;AACtBvD,IAAAA,MAAM,CAACsD,SAAP,GAAmB,IAAnB;;AAEA,QAAIN,OAAO,CAACxB,KAAZ,EAAmB;AACjBxB,MAAAA,MAAM,CAACwD,QAAP,GAAkB,IAAlB;AACAxD,MAAAA,MAAM,CAACyD,OAAP,GAAiB,IAAjB;AACD,KAjBgD,CAkBjD;;;AACA,UAAMtF,UAAU,GAAGK,OAAO,CAAC,KAAKL,UAAN,CAA1B;;AAEA,UAAMuF,mBAAmB,GAAGC,MAAM,CAACC,MAAP,CAAczF,UAAd,EAA0B;AACpD0F,MAAAA,SAAS,EAAE,KAAKC,eAAL,CAAqBd,OAAO,CAAC5D,QAA7B;AADyC,KAA1B,CAA5B;AAIA,UAAM2E,OAAO,GAAGJ,MAAM,CAACC,MAAP,CAAcF,mBAAd,EAAmC1D,MAAnC,CAAhB;AACA,UAAMgE,WAAW,GAAG,MAAM,KAAKzF,UAAL,CAAgB0F,MAAhB,CAAuBF,OAAvB,EAAgC,CAAC,KAAK5F,UAAN,CAAhC,CAA1B;AACA,UAAMwC,WAAW,GAAGqD,WAAW,CAAC3B,OAAZ,CAAoB1B,WAAxC;AACA,UAAMuD,mBAAmB,GAAG,KAAKtF,sBAAL,CAA4BoE,OAA5B,EAAqCrC,WAArC,CAA5B;AACA,UAAMwD,oBAAoB,GAAG,KAAKrE,aAAL,CAC3BkE,WAAW,CAAC3B,OADe,EAE3B6B,mBAF2B,EAG3BlB,OAH2B,EAI3BU,mBAJ2B,CAA7B;AAMA,UAAMU,SAAS,GAAGD,oBAAoB,CAAChE,GAArB,CAA0BkE,IAAD,IAAUA,IAAI,CAAChE,MAAL,IAAe,EAAlD,EAAsDiE,IAAtD,EAAlB;AACA,WAAO;AAAErF,MAAAA,UAAU,EAAEkF,oBAAd;AAAoC9D,MAAAA,MAAM,EAAE+D;AAA5C,KAAP;AACD;;AAEU,QAAL5C,KAAK,CAACwB,OAAD,EAAyC;AAClD;AACA,WAAO,IAAIuB,OAAJ,CAAY,MAAOC,OAAP,IAAmB;AACpC,YAAMC,SAAS,GAAG,KAAKpG,UAAL,CAAgBqG,QAAhB,CAChB1B,OAAO,CAAC2B,EAAR,GAAa;AAAEC,QAAAA,MAAM,EAAE,IAAV;AAAgBC,QAAAA,MAAM,EAAE,IAAxB;AAA8BC,QAAAA,KAAK,EAAE;AAArC,OAAb,GAA2D;AAAEF,QAAAA,MAAM,EAAE,KAAV;AAAiBC,QAAAA,MAAM,EAAE,KAAzB;AAAgCC,QAAAA,KAAK,EAAE;AAAvC,OAD3C,CAAlB,CADoC,CAKpC;;AACA,YAAM3G,UAAU,GAAGK,OAAO,CAAC,KAAKL,UAAN,CAA1B;;AAEA,YAAMuF,mBAAmB,GAAGC,MAAM,CAACC,MAAP,CAAczF,UAAd,EAA0B;AACpD0F,QAAAA,SAAS,EAAE,KAAKC,eAAL,CAAqBd,OAAO,CAAC5D,QAA7B;AADyC,OAA1B,CAA5B;;AAIA,UAAI;AACF,cAAM2F,IAAI,GAAG,sBAAO1C,OAAD,IAAa;AAC9B,cAAI,CAAC,KAAKU,SAAV,EAAqB;AACrB,gBAAMpC,WAAW,GAAG0B,OAAO,CAAC1B,WAA5B;AACA,gBAAMuD,mBAAmB,GAAG,KAAKtF,sBAAL,CAA4BoE,OAA5B,EAAqCrC,WAArC,CAA5B;AACA,gBAAMwD,oBAAoB,GAAG,KAAKrE,aAAL,CAAmBuC,OAAnB,EAA4B6B,mBAA5B,EAAiDlB,OAAjD,EAA0DU,mBAA1D,CAA7B;AACA,gBAAMsB,YAAY,GAAG,KAAK1E,SAAL,CAAeK,WAAf,CAArB;AACA,gBAAMsE,gBAAgB,GAAG;AACvBC,YAAAA,OAAO,EAAE,KADc;AAEvB7E,YAAAA,MAAM,EAAE2E,YAFe;AAGvB/F,YAAAA,UAAU,EAAEkF;AAHW,WAAzB;;AAKA,eAAKpB,SAAL,CAAekC,gBAAf;;AACAT,UAAAA,OAAO,CAACS,gBAAD,CAAP;AACD,SAbY,CAAb,CADE,CAgBF;;AACA,cAAMR,SAAS,CAACU,cAAV,CAAyBJ,IAAzB,CAAN;AAEA,cAAMN,SAAS,CAACjD,KAAV,CACJ,KAAKrD,UADD,EAEJ,KAAK2F,eAAL,CAAqBd,OAAO,CAAC5D,QAA7B,CAFI,EAGJ4D,OAAO,CAACE,QAHJ,EAIJ,KAAK9E,cAJD,CAAN;AAMD,OAzBD,CAyBE,OAAOgH,GAAP,EAAiB;AACjB,aAAK9G,MAAL,CAAYsC,KAAZ,CAAkB,qCAAlB,EAAyDwE,GAAzD;AACD;AACF,KAxCM,CAAP;AAyCD;;AAEOtB,EAAAA,eAAe,CAAC1E,QAAD,EAAiC;AACtD,WAAO,uBAAQA,QAAQ,CAACc,OAAT,GAAmBC,GAAnB,CAAuB,CAAC,GAAGT,OAAH,CAAD,KAAiBA,OAAO,CAACS,GAAR,CAAakF,CAAD,IAAOA,CAAC,CAACzF,IAArB,CAAxC,CAAR,CAAP;AACD;;AA9MuC","sourcesContent":["import { readFileSync } from 'fs-extra';\nimport minimatch from 'minimatch';\nimport { compact, flatten } from 'lodash';\nimport { proxy } from 'comlink';\nimport { Logger } from '@teambit/logger';\nimport { HarmonyWorker } from '@teambit/worker';\nimport { Tester, CallbackFn, TesterContext, Tests, ComponentPatternsMap, ComponentsResults } from '@teambit/tester';\nimport { TestsFiles, TestResult, TestsResult } from '@teambit/tests-results';\nimport { TestResult as JestTestResult, AggregatedResult } from '@jest/test-result';\nimport { formatResultsErrors } from 'jest-message-util';\nimport { ComponentMap } from '@teambit/component';\nimport { AbstractVinyl } from '@teambit/legacy/dist/consumer/component/sources';\nimport type jest from 'jest';\nimport { JestError } from './error';\nimport type { JestWorker } from './jest.worker';\n\nexport class JestTester implements Tester {\n private readonly jestModule: typeof jest;\n\n constructor(\n readonly id: string,\n readonly jestConfig: any,\n private jestModulePath: string,\n private jestWorker: HarmonyWorker<JestWorker>,\n private logger: Logger\n ) {\n // eslint-disable-next-line global-require,import/no-dynamic-require\n this.jestModule = require(jestModulePath);\n }\n\n configPath = this.jestConfig;\n\n displayName = 'Jest';\n\n _callback: CallbackFn | undefined;\n\n displayConfig() {\n return readFileSync(this.jestConfig, 'utf8');\n }\n\n version() {\n return this.jestModule.getVersion();\n }\n\n // private getTestFile(path: string, testerContext: TesterContext): AbstractVinyl | undefined {\n // return testerContext.specFiles.toArray().reduce((acc: AbstractVinyl | undefined, [, specs]) => {\n // const file = specs.find((spec) => spec.path === path);\n // if (file) acc = file;\n // return acc;\n // }, undefined);\n // }\n\n private attachTestsToComponent(testerContext: TesterContext, testResult: JestTestResult[]) {\n return ComponentMap.as(testerContext.components, (component) => {\n const componentSpecFiles = testerContext.patterns.get(component);\n if (!componentSpecFiles) return undefined;\n const [, specs] = componentSpecFiles;\n return testResult.filter((test) => {\n return specs.filter((pattern) => minimatch(test.testFilePath, pattern.path)).length > 0;\n });\n });\n }\n\n private buildTestsObj(\n aggregatedResult: AggregatedResult,\n components: ComponentMap<JestTestResult[] | undefined>,\n testerContext: TesterContext,\n config?: any\n ): ComponentsResults[] {\n const testsSuiteResult = components.toArray().map(([component, testsFiles]) => {\n if (!testsFiles) return undefined;\n if (testsFiles?.length === 0) return undefined;\n const errors = this.getErrors(testsFiles);\n const tests = testsFiles.map((test) => {\n const file = new AbstractVinyl({ path: test.testFilePath, contents: readFileSync(test.testFilePath) });\n const testResults = test.testResults.map((testResult) => {\n const error = formatResultsErrors([testResult], config, { noStackTrace: true }) || undefined;\n const isFailure = testResult.status === 'failed';\n return new TestResult(\n testResult.ancestorTitles,\n testResult.title,\n testResult.status,\n testResult.duration,\n isFailure ? undefined : error,\n isFailure ? error : undefined\n );\n });\n const filePath = file?.basename || test.testFilePath;\n const getError = () => {\n if (!test.testExecError) return undefined;\n if (testerContext.watch) {\n // for some reason, during watch ('bit start'), if a file has an error, the `test.testExecError` is `{}`\n // (an empty object). the failureMessage contains the stringified error.\n // @todo: consider to always use the failureMessage, regardless the context.watch.\n return new JestError(test.failureMessage as string);\n }\n return new JestError(test.testExecError?.message, test.testExecError?.stack);\n };\n const error = getError();\n return new TestsFiles(\n filePath,\n testResults,\n test.numPassingTests,\n test.numFailingTests,\n test.numPendingTests,\n test.perfStats.runtime,\n test.perfStats.slow,\n error\n );\n });\n return {\n componentId: component.id,\n results: new TestsResult(tests, aggregatedResult.success, aggregatedResult.startTime),\n errors,\n };\n });\n\n return compact(testsSuiteResult);\n }\n\n private getErrors(testResult: JestTestResult[]): JestError[] {\n return testResult.reduce((errors: JestError[], test) => {\n if (test.testExecError) {\n const { message, stack, code, type } = test.testExecError;\n errors.push(new JestError(message, stack, code, type));\n } else if (test.failureMessage) {\n errors.push(new JestError(test.failureMessage));\n }\n return errors;\n }, []);\n }\n\n async onTestRunComplete(callback: CallbackFn) {\n this._callback = callback;\n }\n\n async test(context: TesterContext): Promise<Tests> {\n const config: any = {\n rootDir: context.rootPath,\n };\n\n // eslint-disable-next-line no-console\n console.warn = (message: string) => {\n this.logger.warn(message);\n };\n\n if (context.debug) config.runInBand = true;\n if (context.coverage) config.coverage = true;\n config.runInBand = true;\n\n if (context.watch) {\n config.watchAll = true;\n config.noCache = true;\n }\n // eslint-disable-next-line global-require,import/no-dynamic-require\n const jestConfig = require(this.jestConfig);\n\n const jestConfigWithSpecs = Object.assign(jestConfig, {\n testMatch: this.patternsToArray(context.patterns),\n });\n\n const withEnv = Object.assign(jestConfigWithSpecs, config);\n const testsOutPut = await this.jestModule.runCLI(withEnv, [this.jestConfig]);\n const testResults = testsOutPut.results.testResults;\n const componentsWithTests = this.attachTestsToComponent(context, testResults);\n const componentTestResults = this.buildTestsObj(\n testsOutPut.results,\n componentsWithTests,\n context,\n jestConfigWithSpecs\n );\n const allErrors = componentTestResults.map((comp) => comp.errors || []).flat();\n return { components: componentTestResults, errors: allErrors };\n }\n\n async watch(context: TesterContext): Promise<Tests> {\n // eslint-disable-next-line\n return new Promise(async (resolve) => {\n const workerApi = this.jestWorker.initiate(\n context.ui ? { stdout: true, stderr: true, stdin: true } : { stdout: false, stderr: false, stdin: false }\n );\n\n // eslint-disable-next-line\n const jestConfig = require(this.jestConfig);\n\n const jestConfigWithSpecs = Object.assign(jestConfig, {\n testMatch: this.patternsToArray(context.patterns),\n });\n\n try {\n const cbFn = proxy((results) => {\n if (!this._callback) return;\n const testResults = results.testResults;\n const componentsWithTests = this.attachTestsToComponent(context, testResults);\n const componentTestResults = this.buildTestsObj(results, componentsWithTests, context, jestConfigWithSpecs);\n const globalErrors = this.getErrors(testResults);\n const watchTestResults = {\n loading: false,\n errors: globalErrors,\n components: componentTestResults,\n };\n this._callback(watchTestResults);\n resolve(watchTestResults);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n await workerApi.onTestComplete(cbFn);\n\n await workerApi.watch(\n this.jestConfig,\n this.patternsToArray(context.patterns),\n context.rootPath,\n this.jestModulePath\n );\n } catch (err: any) {\n this.logger.error('jest.tester.watch() caught an error', err);\n }\n });\n }\n\n private patternsToArray(patterns: ComponentPatternsMap) {\n return flatten(patterns.toArray().map(([, pattern]) => pattern.map((p) => p.path)));\n }\n}\n"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/jest",
3
- "version": "0.0.656",
3
+ "version": "0.0.659",
4
4
  "homepage": "https://bit.dev/teambit/defender/jest",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.defender",
8
8
  "name": "jest",
9
- "version": "0.0.656"
9
+ "version": "0.0.659"
10
10
  },
11
11
  "dependencies": {
12
12
  "@teambit/harmony": "0.2.11",
@@ -21,12 +21,12 @@
21
21
  "jest-watcher": "26.6.2",
22
22
  "@babel/runtime": "7.12.18",
23
23
  "core-js": "^3.0.0",
24
- "@teambit/cli": "0.0.447",
25
- "@teambit/logger": "0.0.537",
26
- "@teambit/worker": "0.0.656",
27
- "@teambit/component": "0.0.656",
28
- "@teambit/tester": "0.0.656",
29
- "@teambit/tests-results": "0.0.95"
24
+ "@teambit/cli": "0.0.449",
25
+ "@teambit/logger": "0.0.539",
26
+ "@teambit/worker": "0.0.659",
27
+ "@teambit/component": "0.0.659",
28
+ "@teambit/tester": "0.0.659",
29
+ "@teambit/tests-results": "0.0.96"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/react": "^17.0.8",
@@ -39,7 +39,7 @@
39
39
  "@types/node": "12.20.4"
40
40
  },
41
41
  "peerDependencies": {
42
- "@teambit/legacy": "1.0.226",
42
+ "@teambit/legacy": "1.0.228",
43
43
  "jest": "26.6.3",
44
44
  "react-dom": "^16.8.0 || ^17.0.0",
45
45
  "react": "^16.8.0 || ^17.0.0"