@teambit/tester 0.0.657 → 0.0.660

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.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { TesterAspect } from './tester.aspect';
2
- export type { Tester, Tests, TesterContext, CallbackFn, SpecFiles, ComponentPatternsMap } from './tester';
2
+ export type { Tester, Tests, TesterContext, CallbackFn, SpecFiles, ComponentPatternsMap, ComponentsResults, } from './tester';
3
3
  export type { TesterMain } from './tester.main.runtime';
4
4
  export type { TesterUI } from './tester.ui.runtime';
5
5
  export { TesterAspect };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["TesterAspect"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;eAOeA,sB","sourcesContent":["import { TesterAspect } from './tester.aspect';\n\nexport type { Tester, Tests, TesterContext, CallbackFn, SpecFiles, ComponentPatternsMap } from './tester';\nexport type { TesterMain } from './tester.main.runtime';\nexport type { TesterUI } from './tester.ui.runtime';\n\nexport { TesterAspect };\nexport default TesterAspect;\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":["TesterAspect"],"mappings":";;;;;;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;eAeeA,sB","sourcesContent":["import { TesterAspect } from './tester.aspect';\n\nexport type {\n Tester,\n Tests,\n TesterContext,\n CallbackFn,\n SpecFiles,\n ComponentPatternsMap,\n ComponentsResults,\n} from './tester';\nexport type { TesterMain } from './tester.main.runtime';\nexport type { TesterUI } from './tester.ui.runtime';\n\nexport { TesterAspect };\nexport default TesterAspect;\n"]}
package/dist/test.cmd.js CHANGED
@@ -104,8 +104,6 @@ class TestCmd {
104
104
  junit,
105
105
  coverage = false
106
106
  }) {
107
- this.logger.off();
108
-
109
107
  const timer = _timer().Timer.create();
110
108
 
111
109
  const scopeName = typeof scope === 'string' ? scope : undefined;
@@ -135,6 +133,10 @@ class TestCmd {
135
133
  let code = 0;
136
134
 
137
135
  if (watch && !debug) {
136
+ // avoid turning off the logger for non-watch scenario. otherwise, when this aspect throws errors, they'll be
137
+ // swallowed. (Jest errors are shown regardless via Jest, but if the tester is unable to run Jest in the first
138
+ // place, these errors won't be shown)
139
+ this.logger.off();
138
140
  await this.tester.watch(components, {
139
141
  watch,
140
142
  debug,
@@ -142,8 +144,6 @@ class TestCmd {
142
144
  coverage
143
145
  });
144
146
  } else {
145
- var _tests$results;
146
-
147
147
  const tests = await this.tester.test(components, {
148
148
  watch,
149
149
  debug,
@@ -151,11 +151,7 @@ class TestCmd {
151
151
  junit,
152
152
  coverage
153
153
  });
154
- tests === null || tests === void 0 ? void 0 : (_tests$results = tests.results) === null || _tests$results === void 0 ? void 0 : _tests$results.forEach(test => {
155
- var _test$data, _test$data$errors;
156
-
157
- return (_test$data = test.data) !== null && _test$data !== void 0 && (_test$data$errors = _test$data.errors) !== null && _test$data$errors !== void 0 && _test$data$errors.length ? code = 1 : null;
158
- });
154
+ if (tests.hasErrors()) code = 1;
159
155
  }
160
156
 
161
157
  const {
@@ -164,9 +160,7 @@ class TestCmd {
164
160
  if (watch) return /*#__PURE__*/_react().default.createElement(_ink().Box, null);
165
161
  return {
166
162
  code,
167
- data: /*#__PURE__*/_react().default.createElement(_ink().Box, null, /*#__PURE__*/_react().default.createElement(_ink().Text, null, "tested "), /*#__PURE__*/_react().default.createElement(_ink().Text, {
168
- color: "cyan"
169
- }, components.length, " "), /*#__PURE__*/_react().default.createElement(_ink().Text, null, "components in "), /*#__PURE__*/_react().default.createElement(_ink().Text, {
163
+ data: /*#__PURE__*/_react().default.createElement(_ink().Box, null, /*#__PURE__*/_react().default.createElement(_ink().Text, null, "test has been completed in "), /*#__PURE__*/_react().default.createElement(_ink().Text, {
170
164
  color: "cyan"
171
165
  }, seconds, " "), /*#__PURE__*/_react().default.createElement(_ink().Text, null, "seconds."))
172
166
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["test.cmd.tsx"],"names":["TestCmd","constructor","tester","workspace","logger","render","userPattern","watch","debug","all","env","scope","junit","coverage","off","timer","Timer","create","scopeName","undefined","start","ConsumerNotFound","getPatternWithScope","pattern","patternWithScope","components","getComponentsByUserInput","length","NoMatchingComponents","code","data","console","chalk","cyan","name","tests","test","results","forEach","errors","seconds","stop"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;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;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAcO,MAAMA,OAAN,CAAiC;AAiBtCC,EAAAA,WAAW,CAASC,MAAT,EAAqCC,SAArC,EAAmEC,MAAnE,EAAmF;AAAA,SAA1EF,MAA0E,GAA1EA,MAA0E;AAAA,SAA9CC,SAA8C,GAA9CA,SAA8C;AAAA,SAAhBC,MAAgB,GAAhBA,MAAgB;AAAA,kDAhBvF,gBAgBuF;AAAA,yDAfhF,0CAegF;AAAA,mDAdtF,IAcsF;AAAA,mDAbtF,aAasF;AAAA,8DAZ3E,EAY2E;AAAA,qDAXpF,CACR,CAAC,GAAD,EAAM,OAAN,EAAe,iCAAf,CADQ,EAER,CAAC,GAAD,EAAM,OAAN,EAAe,iCAAf,CAFQ,EAGR,CAAC,GAAD,EAAM,KAAN,EAAa,gDAAb,CAHQ,EAIR,CAAC,EAAD,EAAK,kBAAL,EAAyB,sEAAzB,CAJQ,EAKR,CAAC,EAAD,EAAK,UAAL,EAAiB,yBAAjB,CALQ,EAMR,CAAC,GAAD,EAAM,UAAN,EAAkB,yBAAlB,CANQ,EAOR,CAAC,GAAD,EAAM,eAAN,EAAuB,2BAAvB,CAPQ,CAQR;AARQ,KAWoF;AAAE;;AAEpF,QAANC,MAAM,CACV,CAACC,WAAD,CADU,EAEV;AAAEC,IAAAA,KAAK,GAAG,KAAV;AAAiBC,IAAAA,KAAK,GAAG,KAAzB;AAAgCC,IAAAA,GAAG,GAAG,KAAtC;AAA6CC,IAAAA,GAA7C;AAAkDC,IAAAA,KAAlD;AAAyDC,IAAAA,KAAzD;AAAgEC,IAAAA,QAAQ,GAAG;AAA3E,GAFU,EAGV;AACA,SAAKT,MAAL,CAAYU,GAAZ;;AACA,UAAMC,KAAK,GAAGC,eAAMC,MAAN,EAAd;;AACA,UAAMC,SAAS,GAAG,OAAOP,KAAP,KAAiB,QAAjB,GAA4BA,KAA5B,GAAoCQ,SAAtD;AACAJ,IAAAA,KAAK,CAACK,KAAN;AACA,QAAI,CAAC,KAAKjB,SAAV,EAAqB,MAAM,KAAIkB,8BAAJ,GAAN;;AAErB,UAAMC,mBAAmB,GAAG,MAAM;AAChC,UAAI,CAAChB,WAAD,IAAgB,CAACK,KAArB,EAA4B,OAAOQ,SAAP;AAC5B,YAAMI,OAAO,GAAGjB,WAAW,IAAI,IAA/B;AACA,aAAOY,SAAS,GAAI,GAAEA,SAAU,IAAGK,OAAQ,EAA3B,GAA+BA,OAA/C;AACD,KAJD;;AAKA,UAAMC,gBAAgB,GAAGF,mBAAmB,EAA5C;AACA,UAAMG,UAAU,GAAG,MAAM,KAAKtB,SAAL,CAAeuB,wBAAf,CAAwCjB,GAAxC,EAA6Ce,gBAA7C,EAA+D,IAA/D,CAAzB;;AACA,QAAI,CAACC,UAAU,CAACE,MAAhB,EAAwB;AACtB,UAAIrB,WAAJ,EAAiB,MAAM,KAAIsB,mCAAJ,EAAyBtB,WAAzB,CAAN;AACjB,aAAO;AACLuB,QAAAA,IAAI,EAAE,CADD;AAELC,QAAAA,IAAI,eACF,+BAAC,UAAD,qBACE,+BAAC,WAAD;AAAM,UAAA,IAAI;AAAV,4KAE6D,GAF7D,CADF;AAHG,OAAP;AAWD;;AAED,SAAK1B,MAAL,CAAY2B,OAAZ,CACG,oBAAmBN,UAAU,CAACE,MAAO,6BAA4BK,iBAAMC,IAAN,CAAW,KAAK9B,SAAL,CAAe+B,IAA1B,CAAgC,GADpG;AAIA,QAAIL,IAAI,GAAG,CAAX;;AACA,QAAItB,KAAK,IAAI,CAACC,KAAd,EAAqB;AACnB,YAAM,KAAKN,MAAL,CAAYK,KAAZ,CAAkBkB,UAAlB,EAA8B;AAClClB,QAAAA,KADkC;AAElCC,QAAAA,KAFkC;AAGlCE,QAAAA,GAHkC;AAIlCG,QAAAA;AAJkC,OAA9B,CAAN;AAMD,KAPD,MAOO;AAAA;;AACL,YAAMsB,KAAK,GAAG,MAAM,KAAKjC,MAAL,CAAYkC,IAAZ,CAAiBX,UAAjB,EAA6B;AAC/ClB,QAAAA,KAD+C;AAE/CC,QAAAA,KAF+C;AAG/CE,QAAAA,GAH+C;AAI/CE,QAAAA,KAJ+C;AAK/CC,QAAAA;AAL+C,OAA7B,CAApB;AAOAsB,MAAAA,KAAK,SAAL,IAAAA,KAAK,WAAL,8BAAAA,KAAK,CAAEE,OAAP,kEAAgBC,OAAhB,CAAyBF,IAAD;AAAA;;AAAA,eAAW,cAAAA,IAAI,CAACN,IAAL,uEAAWS,MAAX,gEAAmBZ,MAAnB,GAA6BE,IAAI,GAAG,CAApC,GAAyC,IAApD;AAAA,OAAxB;AACD;;AACD,UAAM;AAAEW,MAAAA;AAAF,QAAczB,KAAK,CAAC0B,IAAN,EAApB;AAEA,QAAIlC,KAAJ,EAAW,oBAAO,+BAAC,UAAD,OAAP;AACX,WAAO;AACLsB,MAAAA,IADK;AAELC,MAAAA,IAAI,eACF,+BAAC,UAAD,qBACE,+BAAC,WAAD,kBADF,eAEE,+BAAC,WAAD;AAAM,QAAA,KAAK,EAAC;AAAZ,SAAoBL,UAAU,CAACE,MAA/B,MAFF,eAGE,+BAAC,WAAD,yBAHF,eAIE,+BAAC,WAAD;AAAM,QAAA,KAAK,EAAC;AAAZ,SAAoBa,OAApB,MAJF,eAKE,+BAAC,WAAD,mBALF;AAHG,KAAP;AAYD;;AAxFqC","sourcesContent":["import { Command, CommandOptions } from '@teambit/cli';\nimport chalk from 'chalk';\nimport { Logger } from '@teambit/logger';\nimport { Workspace } from '@teambit/workspace';\nimport { ConsumerNotFound } from '@teambit/legacy/dist/consumer/exceptions';\nimport { Timer } from '@teambit/legacy/dist/toolbox/timer';\nimport { Box, Text } from 'ink';\nimport React from 'react';\nimport { NoMatchingComponents } from './exceptions';\n\nimport type { TesterMain } from './tester.main.runtime';\n\ntype TestFlags = {\n watch: boolean;\n debug: boolean;\n all: boolean;\n env?: string;\n scope?: string;\n junit?: string;\n coverage?: boolean;\n};\n\nexport class TestCmd implements Command {\n name = 'test [pattern]';\n description = 'test set of components in your workspace';\n alias = 'at';\n group = 'development';\n shortDescription = '';\n options = [\n ['w', 'watch', 'start the tester in watch mode.'],\n ['d', 'debug', 'start the tester in debug mode.'],\n ['a', 'all', 'test all components, not only new and modified'],\n ['', 'junit <filepath>', 'write tests results as JUnit XML format into the specified file path'],\n ['', 'coverage', 'show code coverage data'],\n ['e', 'env <id>', 'test only the given env'],\n ['s', 'scope <scope>', 'name of the scope to test'],\n // TODO: we need to reduce this redundant casting every time.\n ] as CommandOptions;\n\n constructor(private tester: TesterMain, private workspace: Workspace, private logger: Logger) {}\n\n async render(\n [userPattern]: [string],\n { watch = false, debug = false, all = false, env, scope, junit, coverage = false }: TestFlags\n ) {\n this.logger.off();\n const timer = Timer.create();\n const scopeName = typeof scope === 'string' ? scope : undefined;\n timer.start();\n if (!this.workspace) throw new ConsumerNotFound();\n\n const getPatternWithScope = () => {\n if (!userPattern && !scope) return undefined;\n const pattern = userPattern || '**';\n return scopeName ? `${scopeName}/${pattern}` : pattern;\n };\n const patternWithScope = getPatternWithScope();\n const components = await this.workspace.getComponentsByUserInput(all, patternWithScope, true);\n if (!components.length) {\n if (userPattern) throw new NoMatchingComponents(userPattern);\n return {\n code: 0,\n data: (\n <Box>\n <Text bold>\n no components found to test. use \"--all\" flag to test all components or specify the ids to test,\n otherwise, only new and modified components will be tested{' '}\n </Text>\n </Box>\n ),\n };\n }\n\n this.logger.console(\n `testing total of ${components.length} components in workspace '${chalk.cyan(this.workspace.name)}'`\n );\n\n let code = 0;\n if (watch && !debug) {\n await this.tester.watch(components, {\n watch,\n debug,\n env,\n coverage,\n });\n } else {\n const tests = await this.tester.test(components, {\n watch,\n debug,\n env,\n junit,\n coverage,\n });\n tests?.results?.forEach((test) => (test.data?.errors?.length ? (code = 1) : null));\n }\n const { seconds } = timer.stop();\n\n if (watch) return <Box></Box>;\n return {\n code,\n data: (\n <Box>\n <Text>tested </Text>\n <Text color=\"cyan\">{components.length} </Text>\n <Text>components in </Text>\n <Text color=\"cyan\">{seconds} </Text>\n <Text>seconds.</Text>\n </Box>\n ),\n };\n }\n}\n"]}
1
+ {"version":3,"sources":["test.cmd.tsx"],"names":["TestCmd","constructor","tester","workspace","logger","render","userPattern","watch","debug","all","env","scope","junit","coverage","timer","Timer","create","scopeName","undefined","start","ConsumerNotFound","getPatternWithScope","pattern","patternWithScope","components","getComponentsByUserInput","length","NoMatchingComponents","code","data","console","chalk","cyan","name","off","tests","test","hasErrors","seconds","stop"],"mappings":"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","sourcesContent":["import { Command, CommandOptions } from '@teambit/cli';\nimport chalk from 'chalk';\nimport { Logger } from '@teambit/logger';\nimport { Workspace } from '@teambit/workspace';\nimport { ConsumerNotFound } from '@teambit/legacy/dist/consumer/exceptions';\nimport { Timer } from '@teambit/legacy/dist/toolbox/timer';\nimport { Box, Text } from 'ink';\nimport React from 'react';\nimport { NoMatchingComponents } from './exceptions';\n\nimport type { TesterMain } from './tester.main.runtime';\n\ntype TestFlags = {\n watch: boolean;\n debug: boolean;\n all: boolean;\n env?: string;\n scope?: string;\n junit?: string;\n coverage?: boolean;\n};\n\nexport class TestCmd implements Command {\n name = 'test [pattern]';\n description = 'test set of components in your workspace';\n alias = 'at';\n group = 'development';\n shortDescription = '';\n options = [\n ['w', 'watch', 'start the tester in watch mode.'],\n ['d', 'debug', 'start the tester in debug mode.'],\n ['a', 'all', 'test all components, not only new and modified'],\n ['', 'junit <filepath>', 'write tests results as JUnit XML format into the specified file path'],\n ['', 'coverage', 'show code coverage data'],\n ['e', 'env <id>', 'test only the given env'],\n ['s', 'scope <scope>', 'name of the scope to test'],\n // TODO: we need to reduce this redundant casting every time.\n ] as CommandOptions;\n\n constructor(private tester: TesterMain, private workspace: Workspace, private logger: Logger) {}\n\n async render(\n [userPattern]: [string],\n { watch = false, debug = false, all = false, env, scope, junit, coverage = false }: TestFlags\n ) {\n const timer = Timer.create();\n const scopeName = typeof scope === 'string' ? scope : undefined;\n timer.start();\n if (!this.workspace) throw new ConsumerNotFound();\n\n const getPatternWithScope = () => {\n if (!userPattern && !scope) return undefined;\n const pattern = userPattern || '**';\n return scopeName ? `${scopeName}/${pattern}` : pattern;\n };\n const patternWithScope = getPatternWithScope();\n const components = await this.workspace.getComponentsByUserInput(all, patternWithScope, true);\n if (!components.length) {\n if (userPattern) throw new NoMatchingComponents(userPattern);\n return {\n code: 0,\n data: (\n <Box>\n <Text bold>\n no components found to test. use \"--all\" flag to test all components or specify the ids to test,\n otherwise, only new and modified components will be tested{' '}\n </Text>\n </Box>\n ),\n };\n }\n\n this.logger.console(\n `testing total of ${components.length} components in workspace '${chalk.cyan(this.workspace.name)}'`\n );\n\n let code = 0;\n if (watch && !debug) {\n // avoid turning off the logger for non-watch scenario. otherwise, when this aspect throws errors, they'll be\n // swallowed. (Jest errors are shown regardless via Jest, but if the tester is unable to run Jest in the first\n // place, these errors won't be shown)\n this.logger.off();\n await this.tester.watch(components, {\n watch,\n debug,\n env,\n coverage,\n });\n } else {\n const tests = await this.tester.test(components, {\n watch,\n debug,\n env,\n junit,\n coverage,\n });\n if (tests.hasErrors()) code = 1;\n }\n const { seconds } = timer.stop();\n\n if (watch) return <Box></Box>;\n return {\n code,\n data: (\n <Box>\n <Text>test has been completed in </Text>\n <Text color=\"cyan\">{seconds} </Text>\n <Text>seconds.</Text>\n </Box>\n ),\n };\n }\n}\n"]}
package/dist/tester.d.ts CHANGED
@@ -15,6 +15,10 @@ export declare type ComponentsResults = {
15
15
  * test results for the component.
16
16
  */
17
17
  results?: TestsResult;
18
+ /**
19
+ * aggregated errors from all files
20
+ */
21
+ errors?: Error[];
18
22
  /**
19
23
  * loading.
20
24
  */
@@ -73,12 +73,7 @@ function testerSchema(tester, graphql) {
73
73
  pending: Int
74
74
  duration: Int
75
75
  slow: Boolean
76
- error: TestError
77
- }
78
-
79
- type TestError {
80
- failureMessage: String
81
- error: String
76
+ errorStr: String
82
77
  }
83
78
 
84
79
  type Tests {
@@ -1 +1 @@
1
- {"version":3,"sources":["tester.graphql.ts"],"names":["testerSchema","tester","graphql","typeDefs","resolvers","Subscription","testsChanged","subscribe","pubsub","asyncIterator","OnTestsChanged","payload","variables","id","ComponentHost","getTests","host","componentId","resolveComponentId","component","get","testsResults","getTestsResults"],"mappings":";;;;;;;;;;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEO,SAASA,YAAT,CAAsBC,MAAtB,EAA0CC,OAA1C,EAAwE;AAC7E,SAAO;AACLC,IAAAA,QAAQ,EAAE,0BAAI;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAhDS;AAiDLC,IAAAA,SAAS,EAAE;AACTC,MAAAA,YAAY,EAAE;AACZC,QAAAA,YAAY,EAAE;AACZC,UAAAA,SAAS,EAAE,wCACT,MAAML,OAAO,CAACM,MAAR,CAAeC,aAAf,CAA6BC,wBAA7B,CADG,EAET,CAACC,OAAD,EAAUC,SAAV,KAAwB;AACtB,mBAAOD,OAAO,CAACL,YAAR,CAAqBO,EAArB,KAA4BD,SAAS,CAACC,EAA7C;AACD,WAJQ;AADC;AADF,OADL;AAYTC,MAAAA,aAAa,EAAE;AACbC,QAAAA,QAAQ,EAAE,OAAOC,IAAP,EAA+B;AAAEH,UAAAA;AAAF,SAA/B,KAA0D;AAClE,gBAAMI,WAAW,GAAG,MAAMD,IAAI,CAACE,kBAAL,CAAwBL,EAAxB,CAA1B;AACA,gBAAMM,SAAS,GAAG,MAAMH,IAAI,CAACI,GAAL,CAASH,WAAT,CAAxB;AACA,cAAI,CAACE,SAAL,EAAgB,OAAO,IAAP;AAChB,gBAAME,YAAY,GAAG,MAAMpB,MAAM,CAACqB,eAAP,CAAuBH,SAAvB,CAA3B;AACA,cAAI,CAACE,YAAL,EAAmB,OAAO,IAAP;AACnB,iBAAOA,YAAP;AACD;AARY;AAZN;AAjDN,GAAP;AAyED","sourcesContent":["import { GraphqlMain, Schema } from '@teambit/graphql';\nimport { ComponentFactory } from '@teambit/component';\nimport { withFilter } from 'graphql-subscriptions';\nimport gql from 'graphql-tag';\n\nimport { TesterMain } from './tester.main.runtime';\nimport { OnTestsChanged } from './tester.service';\n\nexport function testerSchema(tester: TesterMain, graphql: GraphqlMain): Schema {\n return {\n typeDefs: gql`\n extend type ComponentHost {\n getTests(id: String!): Tests\n }\n\n type Subscription {\n testsChanged(id: String!): Tests\n }\n\n type Tests {\n loading: Boolean!\n testsResults: TestsResults\n }\n\n type TestsChanged {\n testsResults: TestsResults\n }\n\n type TestsResults {\n testFiles: [TestFiles]\n success: Boolean\n start: Int\n }\n\n type TestFiles {\n file: String\n tests: [Tests]\n pass: Int\n failed: Int\n pending: Int\n duration: Int\n slow: Boolean\n error: TestError\n }\n\n type TestError {\n failureMessage: String\n error: String\n }\n\n type Tests {\n ancestor: [String]\n name: String\n duration: String\n status: String\n error: String\n }\n `,\n resolvers: {\n Subscription: {\n testsChanged: {\n subscribe: withFilter(\n () => graphql.pubsub.asyncIterator(OnTestsChanged),\n (payload, variables) => {\n return payload.testsChanged.id === variables.id;\n }\n ),\n },\n },\n\n ComponentHost: {\n getTests: async (host: ComponentFactory, { id }: { id: string }) => {\n const componentId = await host.resolveComponentId(id);\n const component = await host.get(componentId);\n if (!component) return null;\n const testsResults = await tester.getTestsResults(component);\n if (!testsResults) return null;\n return testsResults;\n },\n },\n },\n };\n}\n"]}
1
+ {"version":3,"sources":["tester.graphql.ts"],"names":["testerSchema","tester","graphql","typeDefs","resolvers","Subscription","testsChanged","subscribe","pubsub","asyncIterator","OnTestsChanged","payload","variables","id","ComponentHost","getTests","host","componentId","resolveComponentId","component","get","testsResults","getTestsResults"],"mappings":";;;;;;;;;;;AAEA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAEO,SAASA,YAAT,CAAsBC,MAAtB,EAA0CC,OAA1C,EAAwE;AAC7E,SAAO;AACLC,IAAAA,QAAQ,EAAE,0BAAI;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KA3CS;AA4CLC,IAAAA,SAAS,EAAE;AACTC,MAAAA,YAAY,EAAE;AACZC,QAAAA,YAAY,EAAE;AACZC,UAAAA,SAAS,EAAE,wCACT,MAAML,OAAO,CAACM,MAAR,CAAeC,aAAf,CAA6BC,wBAA7B,CADG,EAET,CAACC,OAAD,EAAUC,SAAV,KAAwB;AACtB,mBAAOD,OAAO,CAACL,YAAR,CAAqBO,EAArB,KAA4BD,SAAS,CAACC,EAA7C;AACD,WAJQ;AADC;AADF,OADL;AAYTC,MAAAA,aAAa,EAAE;AACbC,QAAAA,QAAQ,EAAE,OAAOC,IAAP,EAA+B;AAAEH,UAAAA;AAAF,SAA/B,KAA0D;AAClE,gBAAMI,WAAW,GAAG,MAAMD,IAAI,CAACE,kBAAL,CAAwBL,EAAxB,CAA1B;AACA,gBAAMM,SAAS,GAAG,MAAMH,IAAI,CAACI,GAAL,CAASH,WAAT,CAAxB;AACA,cAAI,CAACE,SAAL,EAAgB,OAAO,IAAP;AAChB,gBAAME,YAAY,GAAG,MAAMpB,MAAM,CAACqB,eAAP,CAAuBH,SAAvB,CAA3B;AACA,cAAI,CAACE,YAAL,EAAmB,OAAO,IAAP;AACnB,iBAAOA,YAAP;AACD;AARY;AAZN;AA5CN,GAAP;AAoED","sourcesContent":["import { GraphqlMain, Schema } from '@teambit/graphql';\nimport { ComponentFactory } from '@teambit/component';\nimport { withFilter } from 'graphql-subscriptions';\nimport gql from 'graphql-tag';\n\nimport { TesterMain } from './tester.main.runtime';\nimport { OnTestsChanged } from './tester.service';\n\nexport function testerSchema(tester: TesterMain, graphql: GraphqlMain): Schema {\n return {\n typeDefs: gql`\n extend type ComponentHost {\n getTests(id: String!): Tests\n }\n\n type Subscription {\n testsChanged(id: String!): Tests\n }\n\n type Tests {\n loading: Boolean!\n testsResults: TestsResults\n }\n\n type TestsChanged {\n testsResults: TestsResults\n }\n\n type TestsResults {\n testFiles: [TestFiles]\n success: Boolean\n start: Int\n }\n\n type TestFiles {\n file: String\n tests: [Tests]\n pass: Int\n failed: Int\n pending: Int\n duration: Int\n slow: Boolean\n errorStr: String\n }\n\n type Tests {\n ancestor: [String]\n name: String\n duration: String\n status: String\n error: String\n }\n `,\n resolvers: {\n Subscription: {\n testsChanged: {\n subscribe: withFilter(\n () => graphql.pubsub.asyncIterator(OnTestsChanged),\n (payload, variables) => {\n return payload.testsChanged.id === variables.id;\n }\n ),\n },\n },\n\n ComponentHost: {\n getTests: async (host: ComponentFactory, { id }: { id: string }) => {\n const componentId = await host.resolveComponentId(id);\n const component = await host.get(componentId);\n if (!component) return null;\n const testsResults = await tester.getTestsResults(component);\n if (!testsResults) return null;\n return testsResults;\n },\n },\n },\n };\n}\n"]}
@@ -91,16 +91,6 @@ function _utils() {
91
91
  return data;
92
92
  }
93
93
 
94
- function _exceptions() {
95
- const data = require("./exceptions");
96
-
97
- _exceptions = function () {
98
- return data;
99
- };
100
-
101
- return data;
102
- }
103
-
104
94
  const chalk = require('chalk');
105
95
 
106
96
  const OnTestsChanged = 'OnTestsChanged';
@@ -153,8 +143,6 @@ class TesterService {
153
143
  }
154
144
 
155
145
  async run(context, options) {
156
- var _results$errors;
157
-
158
146
  const tester = context.env.getTester();
159
147
 
160
148
  const specFiles = _component().ComponentMap.as(context.components, component => {
@@ -166,7 +154,14 @@ class TesterService {
166
154
  if (specs.length > 0) acc += 1;
167
155
  return acc;
168
156
  }, 0);
169
- if (testCount === 0 && !options.ui) throw new (_exceptions().NoTestFilesFound)(this.patterns.join(','));
157
+
158
+ if (testCount === 0 && !options.ui) {
159
+ this.logger.consoleWarning(`no tests found for environment ${chalk.cyan(context.id)}\n`);
160
+ return {
161
+ components: []
162
+ };
163
+ }
164
+
170
165
  if (!options.ui) this.logger.console(`testing ${componentWithTests} components with environment ${chalk.cyan(context.id)}\n`);
171
166
 
172
167
  const patterns = _component().ComponentMap.as(context.components, component => {
@@ -212,9 +207,6 @@ class TesterService {
212
207
  }
213
208
 
214
209
  const results = await tester.test(testerContext);
215
- (_results$errors = results.errors) === null || _results$errors === void 0 ? void 0 : _results$errors.forEach(error => {
216
- this.logger.console(error === null || error === void 0 ? void 0 : error.message);
217
- });
218
210
  return results;
219
211
  }
220
212
 
@@ -1 +1 @@
1
- {"version":3,"sources":["tester.service.tsx"],"names":["chalk","require","OnTestsChanged","TesterService","constructor","workspace","patterns","logger","pubsub","devFiles","render","env","descriptor","getDescriptor","id","displayName","version","config","language","ignoreIllegals","environment","getTester","undefined","tester","icon","displayConfig","onTestRunComplete","callback","_callback","run","context","options","specFiles","ComponentMap","as","components","component","testCount","toArray","reduce","acc","specs","length","componentWithTests","ui","NoTestFilesFound","join","console","cyan","dir","componentDir","componentPatterns","getDevPatterns","TesterAspect","map","pattern","path","relative","testerContext","Object","assign","release","rootPath","debug","watch","coverage","results","forEach","publish","testsChanged","componentId","toString","testsResults","loading","test","errors","error","message"],"mappings":"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","sourcesContent":["import { Logger } from '@teambit/logger';\nimport { resolve } from 'path';\nimport React from 'react';\nimport { Text, Newline } from 'ink';\nimport { EnvService, ExecutionContext, EnvDefinition } from '@teambit/envs';\nimport { ComponentMap } from '@teambit/component';\nimport { Workspace } from '@teambit/workspace';\nimport highlight from 'cli-highlight';\nimport { PubSubEngine } from 'graphql-subscriptions';\nimport { DevFilesMain } from '@teambit/dev-files';\nimport { Tester, Tests, CallbackFn } from './tester';\nimport { TesterAspect } from './tester.aspect';\nimport { TesterOptions } from './tester.main.runtime';\nimport { detectTestFiles } from './utils';\nimport { NoTestFilesFound } from './exceptions';\n\nconst chalk = require('chalk');\n\nexport const OnTestsChanged = 'OnTestsChanged';\n\nexport type TesterDescriptor = {\n /**\n * id of the tester (e.g. jest/mocha)\n */\n id: string;\n\n /**\n * display name of the tester (e.g. Jest / Mocha)\n */\n displayName: string;\n\n /**\n * icon of the configured tester.\n */\n icon: string;\n\n /**\n * string containing the config for display.\n */\n config: string;\n\n version?: string;\n};\n\nexport class TesterService implements EnvService<Tests, TesterDescriptor> {\n name = 'tester';\n\n constructor(\n readonly workspace: Workspace,\n /**\n * regex used to identify which files to test.\n */\n readonly patterns: string[],\n\n private logger: Logger,\n\n private pubsub: PubSubEngine,\n\n private devFiles: DevFilesMain\n ) {}\n\n _callback: CallbackFn | undefined;\n\n render(env: EnvDefinition) {\n const descriptor = this.getDescriptor(env);\n return (\n <Text key={descriptor?.id}>\n <Text color=\"cyan\">configured tester: </Text>\n <Text>\n {descriptor?.id} ({descriptor?.displayName} @ {descriptor?.version})\n </Text>\n <Newline />\n <Text underline color=\"cyan\">\n tester config:\n </Text>\n <Newline />\n <Text>\n {/* refactor a separate component which highlights for cli */}\n {highlight(descriptor?.config || '', { language: 'javascript', ignoreIllegals: true })}\n </Text>\n <Newline />\n </Text>\n );\n }\n\n getDescriptor(environment: EnvDefinition) {\n if (!environment.env.getTester) return undefined;\n const tester: Tester = environment.env.getTester();\n\n return {\n id: tester.id || '',\n displayName: tester.displayName || '',\n icon: tester.icon || '',\n config: tester.displayConfig ? tester.displayConfig() : '',\n version: tester.version ? tester.version() : '?',\n };\n }\n\n onTestRunComplete(callback: CallbackFn) {\n this._callback = callback;\n }\n\n async run(context: ExecutionContext, options: TesterOptions): Promise<Tests> {\n const tester: Tester = context.env.getTester();\n const specFiles = ComponentMap.as(context.components, (component) => {\n return detectTestFiles(component, this.devFiles);\n });\n const testCount = specFiles.toArray().reduce((acc, [, specs]) => acc + specs.length, 0);\n\n const componentWithTests = specFiles.toArray().reduce((acc: number, [, specs]) => {\n if (specs.length > 0) acc += 1;\n return acc;\n }, 0);\n\n if (testCount === 0 && !options.ui) throw new NoTestFilesFound(this.patterns.join(','));\n\n if (!options.ui)\n this.logger.console(`testing ${componentWithTests} components with environment ${chalk.cyan(context.id)}\\n`);\n\n const patterns = ComponentMap.as(context.components, (component) => {\n const dir = this.workspace.componentDir(component.id);\n const componentPatterns = this.devFiles.getDevPatterns(component, TesterAspect.id);\n return componentPatterns.map((pattern: string) => ({ path: resolve(dir, pattern), relative: pattern }));\n });\n\n const testerContext = Object.assign(context, {\n release: false,\n specFiles,\n patterns,\n rootPath: this.workspace.path,\n workspace: this.workspace,\n debug: options.debug,\n watch: options.watch,\n ui: options.ui,\n coverage: options.coverage,\n });\n\n if (options.watch && options.ui && tester.watch) {\n if (tester.onTestRunComplete) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n tester.onTestRunComplete((results) => {\n if (this._callback) this._callback(results);\n results.components.forEach((component) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.pubsub.publish(OnTestsChanged, {\n testsChanged: {\n id: component.componentId.toString(),\n testsResults: component.results,\n loading: component.loading,\n },\n });\n });\n });\n }\n\n return tester.watch(testerContext);\n }\n\n const results = await tester.test(testerContext);\n\n results.errors?.forEach((error) => {\n this.logger.console(error?.message);\n });\n\n return results;\n }\n}\n"]}
1
+ {"version":3,"sources":["tester.service.tsx"],"names":["chalk","require","OnTestsChanged","TesterService","constructor","workspace","patterns","logger","pubsub","devFiles","render","env","descriptor","getDescriptor","id","displayName","version","config","language","ignoreIllegals","environment","getTester","undefined","tester","icon","displayConfig","onTestRunComplete","callback","_callback","run","context","options","specFiles","ComponentMap","as","components","component","testCount","toArray","reduce","acc","specs","length","componentWithTests","ui","consoleWarning","cyan","console","dir","componentDir","componentPatterns","getDevPatterns","TesterAspect","map","pattern","path","relative","testerContext","Object","assign","release","rootPath","debug","watch","coverage","results","forEach","publish","testsChanged","componentId","toString","testsResults","loading","test"],"mappings":"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","sourcesContent":["import { Logger } from '@teambit/logger';\nimport { resolve } from 'path';\nimport React from 'react';\nimport { Text, Newline } from 'ink';\nimport { EnvService, ExecutionContext, EnvDefinition } from '@teambit/envs';\nimport { ComponentMap } from '@teambit/component';\nimport { Workspace } from '@teambit/workspace';\nimport highlight from 'cli-highlight';\nimport { PubSubEngine } from 'graphql-subscriptions';\nimport { DevFilesMain } from '@teambit/dev-files';\nimport { Tester, Tests, CallbackFn } from './tester';\nimport { TesterAspect } from './tester.aspect';\nimport { TesterOptions } from './tester.main.runtime';\nimport { detectTestFiles } from './utils';\n\nconst chalk = require('chalk');\n\nexport const OnTestsChanged = 'OnTestsChanged';\n\nexport type TesterDescriptor = {\n /**\n * id of the tester (e.g. jest/mocha)\n */\n id: string;\n\n /**\n * display name of the tester (e.g. Jest / Mocha)\n */\n displayName: string;\n\n /**\n * icon of the configured tester.\n */\n icon: string;\n\n /**\n * string containing the config for display.\n */\n config: string;\n\n version?: string;\n};\n\nexport class TesterService implements EnvService<Tests, TesterDescriptor> {\n name = 'tester';\n\n constructor(\n readonly workspace: Workspace,\n /**\n * regex used to identify which files to test.\n */\n readonly patterns: string[],\n\n private logger: Logger,\n\n private pubsub: PubSubEngine,\n\n private devFiles: DevFilesMain\n ) {}\n\n _callback: CallbackFn | undefined;\n\n render(env: EnvDefinition) {\n const descriptor = this.getDescriptor(env);\n return (\n <Text key={descriptor?.id}>\n <Text color=\"cyan\">configured tester: </Text>\n <Text>\n {descriptor?.id} ({descriptor?.displayName} @ {descriptor?.version})\n </Text>\n <Newline />\n <Text underline color=\"cyan\">\n tester config:\n </Text>\n <Newline />\n <Text>\n {/* refactor a separate component which highlights for cli */}\n {highlight(descriptor?.config || '', { language: 'javascript', ignoreIllegals: true })}\n </Text>\n <Newline />\n </Text>\n );\n }\n\n getDescriptor(environment: EnvDefinition) {\n if (!environment.env.getTester) return undefined;\n const tester: Tester = environment.env.getTester();\n\n return {\n id: tester.id || '',\n displayName: tester.displayName || '',\n icon: tester.icon || '',\n config: tester.displayConfig ? tester.displayConfig() : '',\n version: tester.version ? tester.version() : '?',\n };\n }\n\n onTestRunComplete(callback: CallbackFn) {\n this._callback = callback;\n }\n\n async run(context: ExecutionContext, options: TesterOptions): Promise<Tests> {\n const tester: Tester = context.env.getTester();\n const specFiles = ComponentMap.as(context.components, (component) => {\n return detectTestFiles(component, this.devFiles);\n });\n const testCount = specFiles.toArray().reduce((acc, [, specs]) => acc + specs.length, 0);\n\n const componentWithTests = specFiles.toArray().reduce((acc: number, [, specs]) => {\n if (specs.length > 0) acc += 1;\n return acc;\n }, 0);\n\n if (testCount === 0 && !options.ui) {\n this.logger.consoleWarning(`no tests found for environment ${chalk.cyan(context.id)}\\n`);\n return { components: [] };\n }\n\n if (!options.ui)\n this.logger.console(`testing ${componentWithTests} components with environment ${chalk.cyan(context.id)}\\n`);\n\n const patterns = ComponentMap.as(context.components, (component) => {\n const dir = this.workspace.componentDir(component.id);\n const componentPatterns = this.devFiles.getDevPatterns(component, TesterAspect.id);\n return componentPatterns.map((pattern: string) => ({ path: resolve(dir, pattern), relative: pattern }));\n });\n\n const testerContext = Object.assign(context, {\n release: false,\n specFiles,\n patterns,\n rootPath: this.workspace.path,\n workspace: this.workspace,\n debug: options.debug,\n watch: options.watch,\n ui: options.ui,\n coverage: options.coverage,\n });\n\n if (options.watch && options.ui && tester.watch) {\n if (tester.onTestRunComplete) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n tester.onTestRunComplete((results) => {\n if (this._callback) this._callback(results);\n results.components.forEach((component) => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.pubsub.publish(OnTestsChanged, {\n testsChanged: {\n id: component.componentId.toString(),\n testsResults: component.results,\n loading: component.loading,\n },\n });\n });\n });\n }\n\n return tester.watch(testerContext);\n }\n\n const results = await tester.test(testerContext);\n\n return results;\n }\n}\n"]}
@@ -53,16 +53,6 @@ function _path() {
53
53
  return data;
54
54
  }
55
55
 
56
- function _lodash() {
57
- const data = require("lodash");
58
-
59
- _lodash = function () {
60
- return data;
61
- };
62
-
63
- return data;
64
- }
65
-
66
56
  function _compiler() {
67
57
  const data = require("@teambit/compiler");
68
58
 
@@ -152,8 +142,7 @@ class TesterTask {
152
142
  }); // TODO: remove after fix AbstractVinyl on capsule
153
143
  // @ts-ignore
154
144
 
155
- const testsResults = await tester.test(testerContext);
156
- const generalErrorsMessages = (0, _lodash().flatten)(testsResults.errors).map(err => err.message) || []; // write junit files
145
+ const testsResults = await tester.test(testerContext); // write junit files
157
146
 
158
147
  await Promise.all(testsResults.components.map(async compResult => {
159
148
  const junit = (0, _junitGenerator().testsResultsToJUnitFormat)([compResult]);
@@ -169,34 +158,21 @@ class TesterTask {
169
158
  artifacts: getArtifactDef(),
170
159
  // @ts-ignore
171
160
  componentsResults: testsResults.components.map(componentTests => {
172
- var _componentTests$resul, _context$capsuleNetwo;
173
-
174
- const componentErrors = (_componentTests$resul = componentTests.results) === null || _componentTests$resul === void 0 ? void 0 : _componentTests$resul.testFiles.reduce((errors, file) => {
175
- var _file$error;
176
-
177
- if (file !== null && file !== void 0 && (_file$error = file.error) !== null && _file$error !== void 0 && _file$error.failureMessage) {
178
- errors.push(file.error.failureMessage);
179
- }
161
+ var _context$capsuleNetwo;
180
162
 
181
- file.tests.forEach(test => {
182
- if (test.error) errors.push(test.error);
183
- if (test.failure) errors.push(test.failure);
184
- });
185
- return errors;
186
- }, []);
163
+ const componentErrors = componentTests.errors;
187
164
  const component = (_context$capsuleNetwo = context.capsuleNetwork.graphCapsules.getCapsule(componentTests.componentId)) === null || _context$capsuleNetwo === void 0 ? void 0 : _context$capsuleNetwo.component;
188
165
 
189
166
  if (!component) {
190
167
  throw new Error(`unable to find ${componentTests.componentId.toString()} in capsules`);
191
168
  }
192
169
 
193
- const errors = (componentErrors || []).concat(generalErrorsMessages);
194
170
  return {
195
171
  component,
196
172
  metadata: {
197
173
  tests: componentTests.results
198
174
  },
199
- errors
175
+ errors: componentErrors
200
176
  };
201
177
  })
202
178
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["tester.task.ts"],"names":["TesterTask","constructor","aspectId","devFiles","CompilerAspect","id","execute","context","tester","env","getTester","componentsSpecFiles","ComponentMap","as","components","component","testCount","toArray","reduce","acc","specs","length","artifacts","componentsResults","specFilesWithCapsule","componentSpecFiles","get","Error","map","specFile","capsule","capsuleNetwork","graphCapsules","getCapsule","compiler","getCompiler","distPath","getDistPathBySrcPath","relative","path","testerContext","Object","assign","release","specFiles","rootPath","capsulesRootDir","patterns","testsResults","test","generalErrorsMessages","errors","err","message","Promise","all","compResult","junit","componentId","toString","fs","outputFile","getJUnitArtifactPath","getArtifactDef","componentTests","componentErrors","results","testFiles","file","error","failureMessage","push","tests","forEach","failure","concat","metadata","CAPSULE_ARTIFACTS_DIR","name","globPatterns","rootDir"],"mappings":"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","sourcesContent":["import { BuildContext, BuiltTaskResult, BuildTask, CAPSULE_ARTIFACTS_DIR } from '@teambit/builder';\nimport fs from 'fs-extra';\nimport { join } from 'path';\nimport { flatten } from 'lodash';\nimport { Compiler, CompilerAspect } from '@teambit/compiler';\nimport { DevFilesMain } from '@teambit/dev-files';\nimport { ComponentMap } from '@teambit/component';\nimport { Tester } from './tester';\nimport { detectTestFiles } from './utils';\nimport { testsResultsToJUnitFormat } from './utils/junit-generator';\n\n/**\n * tester build task. Allows to test components during component build.\n */\nexport class TesterTask implements BuildTask {\n readonly name = 'TestComponents';\n readonly dependencies = [CompilerAspect.id];\n constructor(readonly aspectId: string, private devFiles: DevFilesMain) {}\n\n async execute(context: BuildContext): Promise<BuiltTaskResult> {\n const tester: Tester = context.env.getTester();\n const componentsSpecFiles = ComponentMap.as(context.components, (component) => {\n return detectTestFiles(component, this.devFiles);\n });\n\n const testCount = componentsSpecFiles.toArray().reduce((acc, [, specs]) => acc + specs.length, 0);\n if (testCount === 0)\n return {\n artifacts: [],\n componentsResults: [],\n };\n\n const specFilesWithCapsule = ComponentMap.as(context.components, (component) => {\n const componentSpecFiles = componentsSpecFiles.get(component);\n if (!componentSpecFiles) throw new Error('capsule not found');\n const [, specs] = componentSpecFiles;\n return specs.map((specFile) => {\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(component.id);\n if (!capsule) throw new Error('capsule not found');\n const compiler: Compiler = context.env.getCompiler();\n const distPath = compiler.getDistPathBySrcPath(specFile.relative);\n\n // TODO: fix spec type file need to capsule will return files with type AbstractVinyl\n return { path: join(capsule.path, distPath), relative: distPath };\n });\n });\n\n const testerContext = Object.assign(context, {\n release: true,\n specFiles: specFilesWithCapsule,\n rootPath: context.capsuleNetwork.capsulesRootDir,\n patterns: specFilesWithCapsule,\n });\n\n // TODO: remove after fix AbstractVinyl on capsule\n // @ts-ignore\n const testsResults = await tester.test(testerContext);\n const generalErrorsMessages = flatten(testsResults.errors).map((err) => err.message) || [];\n\n // write junit files\n await Promise.all(\n testsResults.components.map(async (compResult) => {\n const junit = testsResultsToJUnitFormat([compResult]);\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(compResult.componentId);\n if (!capsule) {\n throw new Error(`unable to find ${compResult.componentId.toString()} in capsules`);\n }\n await fs.outputFile(join(capsule.path, getJUnitArtifactPath()), junit);\n })\n );\n\n return {\n artifacts: getArtifactDef(), // @ts-ignore\n componentsResults: testsResults.components.map((componentTests) => {\n const componentErrors = componentTests.results?.testFiles.reduce((errors: string[], file) => {\n if (file?.error?.failureMessage) {\n errors.push(file.error.failureMessage);\n }\n file.tests.forEach((test) => {\n if (test.error) errors.push(test.error);\n if (test.failure) errors.push(test.failure);\n });\n\n return errors;\n }, []);\n const component = context.capsuleNetwork.graphCapsules.getCapsule(componentTests.componentId)?.component;\n if (!component) {\n throw new Error(`unable to find ${componentTests.componentId.toString()} in capsules`);\n }\n const errors = (componentErrors || []).concat(generalErrorsMessages);\n\n return {\n component,\n metadata: { tests: componentTests.results },\n errors,\n };\n }),\n };\n }\n}\n\nexport function getJUnitArtifactPath() {\n return join(CAPSULE_ARTIFACTS_DIR, '__bit_junit.xml');\n}\n\nexport function getArtifactDef() {\n return [\n {\n name: 'junit',\n globPatterns: [getJUnitArtifactPath()],\n rootDir: CAPSULE_ARTIFACTS_DIR,\n },\n ];\n}\n"]}
1
+ {"version":3,"sources":["tester.task.ts"],"names":["TesterTask","constructor","aspectId","devFiles","CompilerAspect","id","execute","context","tester","env","getTester","componentsSpecFiles","ComponentMap","as","components","component","testCount","toArray","reduce","acc","specs","length","artifacts","componentsResults","specFilesWithCapsule","componentSpecFiles","get","Error","map","specFile","capsule","capsuleNetwork","graphCapsules","getCapsule","compiler","getCompiler","distPath","getDistPathBySrcPath","relative","path","testerContext","Object","assign","release","specFiles","rootPath","capsulesRootDir","patterns","testsResults","test","Promise","all","compResult","junit","componentId","toString","fs","outputFile","getJUnitArtifactPath","getArtifactDef","componentTests","componentErrors","errors","metadata","tests","results","CAPSULE_ARTIFACTS_DIR","name","globPatterns","rootDir"],"mappings":"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","sourcesContent":["import { BuildContext, BuiltTaskResult, BuildTask, CAPSULE_ARTIFACTS_DIR } from '@teambit/builder';\nimport fs from 'fs-extra';\nimport { join } from 'path';\nimport { Compiler, CompilerAspect } from '@teambit/compiler';\nimport { DevFilesMain } from '@teambit/dev-files';\nimport { ComponentMap } from '@teambit/component';\nimport { Tester } from './tester';\nimport { detectTestFiles } from './utils';\nimport { testsResultsToJUnitFormat } from './utils/junit-generator';\n\n/**\n * tester build task. Allows to test components during component build.\n */\nexport class TesterTask implements BuildTask {\n readonly name = 'TestComponents';\n readonly dependencies = [CompilerAspect.id];\n constructor(readonly aspectId: string, private devFiles: DevFilesMain) {}\n\n async execute(context: BuildContext): Promise<BuiltTaskResult> {\n const tester: Tester = context.env.getTester();\n const componentsSpecFiles = ComponentMap.as(context.components, (component) => {\n return detectTestFiles(component, this.devFiles);\n });\n\n const testCount = componentsSpecFiles.toArray().reduce((acc, [, specs]) => acc + specs.length, 0);\n if (testCount === 0)\n return {\n artifacts: [],\n componentsResults: [],\n };\n\n const specFilesWithCapsule = ComponentMap.as(context.components, (component) => {\n const componentSpecFiles = componentsSpecFiles.get(component);\n if (!componentSpecFiles) throw new Error('capsule not found');\n const [, specs] = componentSpecFiles;\n return specs.map((specFile) => {\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(component.id);\n if (!capsule) throw new Error('capsule not found');\n const compiler: Compiler = context.env.getCompiler();\n const distPath = compiler.getDistPathBySrcPath(specFile.relative);\n\n // TODO: fix spec type file need to capsule will return files with type AbstractVinyl\n return { path: join(capsule.path, distPath), relative: distPath };\n });\n });\n\n const testerContext = Object.assign(context, {\n release: true,\n specFiles: specFilesWithCapsule,\n rootPath: context.capsuleNetwork.capsulesRootDir,\n patterns: specFilesWithCapsule,\n });\n\n // TODO: remove after fix AbstractVinyl on capsule\n // @ts-ignore\n const testsResults = await tester.test(testerContext);\n\n // write junit files\n await Promise.all(\n testsResults.components.map(async (compResult) => {\n const junit = testsResultsToJUnitFormat([compResult]);\n const capsule = context.capsuleNetwork.graphCapsules.getCapsule(compResult.componentId);\n if (!capsule) {\n throw new Error(`unable to find ${compResult.componentId.toString()} in capsules`);\n }\n await fs.outputFile(join(capsule.path, getJUnitArtifactPath()), junit);\n })\n );\n\n return {\n artifacts: getArtifactDef(), // @ts-ignore\n componentsResults: testsResults.components.map((componentTests) => {\n const componentErrors = componentTests.errors;\n const component = context.capsuleNetwork.graphCapsules.getCapsule(componentTests.componentId)?.component;\n if (!component) {\n throw new Error(`unable to find ${componentTests.componentId.toString()} in capsules`);\n }\n\n return {\n component,\n metadata: { tests: componentTests.results },\n errors: componentErrors,\n };\n }),\n };\n }\n}\n\nexport function getJUnitArtifactPath() {\n return join(CAPSULE_ARTIFACTS_DIR, '__bit_junit.xml');\n}\n\nexport function getArtifactDef() {\n return [\n {\n name: 'junit',\n globPatterns: [getJUnitArtifactPath()],\n rootDir: CAPSULE_ARTIFACTS_DIR,\n },\n ];\n}\n"]}
@@ -141,9 +141,7 @@ const TESTS_SUBSCRIPTION_CHANGED = (0, _client().gql)`
141
141
  pass
142
142
  failed
143
143
  pending
144
- error {
145
- failureMessage
146
- }
144
+ errorStr
147
145
  tests {
148
146
  ancestor
149
147
  duration
@@ -157,7 +155,7 @@ const TESTS_SUBSCRIPTION_CHANGED = (0, _client().gql)`
157
155
  }
158
156
  `;
159
157
  const GET_COMPONENT = (0, _client().gql)`
160
- query($id: String!) {
158
+ query ($id: String!) {
161
159
  getHost {
162
160
  id # for GQL caching
163
161
  getTests(id: $id) {
@@ -169,9 +167,7 @@ const GET_COMPONENT = (0, _client().gql)`
169
167
  pass
170
168
  failed
171
169
  pending
172
- error {
173
- failureMessage
174
- }
170
+ errorStr
175
171
  tests {
176
172
  ancestor
177
173
  duration
@@ -1 +1 @@
1
- {"version":3,"sources":["tests-page.tsx"],"names":["TESTS_SUBSCRIPTION_CHANGED","GET_COMPONENT","TestsPage","className","emptyState","component","ComponentContext","onTestsChanged","variables","id","toString","data","_legacy","name","testData","testsChanged","getHost","getTests","testResults","testsResults","testFiles","loading","env","environment","EmptyStateTemplate","get","host","styles","testsPage","title","separator","testBlock"],"mappings":"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","sourcesContent":["import { useQuery, useSubscription, gql } from '@apollo/client';\nimport { ComponentContext } from '@teambit/component';\nimport { H1 } from '@teambit/documenter.ui.heading';\nimport { Separator } from '@teambit/design.ui.separator';\nimport { EmptyBox } from '@teambit/design.ui.empty-box';\nimport { MDXLayout } from '@teambit/mdx.ui.mdx-layout';\nimport { AlertCard } from '@teambit/design.ui.alert-card';\nimport { TestLoader } from '@teambit/defender.ui.test-loader';\nimport classNames from 'classnames';\nimport React, { HTMLAttributes, useContext } from 'react';\nimport { TestTable } from '@teambit/defender.ui.test-table';\nimport { EmptyStateSlot } from '../tester.ui.runtime';\nimport styles from './tests-page.module.scss';\n\nconst TESTS_SUBSCRIPTION_CHANGED = gql`\n subscription OnTestsChanged($id: String!) {\n testsChanged(id: $id) {\n testsResults {\n testFiles {\n file\n duration\n pass\n failed\n pending\n error {\n failureMessage\n }\n tests {\n ancestor\n duration\n status\n name\n error\n }\n }\n }\n }\n }\n`;\n\nconst GET_COMPONENT = gql`\n query($id: String!) {\n getHost {\n id # for GQL caching\n getTests(id: $id) {\n loading\n testsResults {\n testFiles {\n file\n duration\n pass\n failed\n pending\n error {\n failureMessage\n }\n tests {\n ancestor\n duration\n status\n name\n error\n }\n }\n }\n }\n }\n }\n`;\n\ntype TestsPageProps = {\n emptyState: EmptyStateSlot;\n} & HTMLAttributes<HTMLDivElement>;\n\nexport function TestsPage({ className, emptyState }: TestsPageProps) {\n const component = useContext(ComponentContext);\n const onTestsChanged = useSubscription(TESTS_SUBSCRIPTION_CHANGED, { variables: { id: component.id.toString() } });\n const { data } = useQuery(GET_COMPONENT, {\n variables: { id: component.id._legacy.name },\n });\n\n const testData = onTestsChanged.data?.testsChanged || data?.getHost?.getTests;\n const testResults = testData?.testsResults?.testFiles;\n\n // TODO: change loading EmptyBox\n if (testData?.loading) return <TestLoader />;\n\n const env = component.environment?.id;\n const EmptyStateTemplate = emptyState.get(env || '');\n\n if (\n (testResults === null || testData?.testsResults === null) &&\n component.host === 'teambit.workspace/workspace' &&\n EmptyStateTemplate\n ) {\n return (\n <div className={classNames(styles.testsPage, className)}>\n <div>\n <H1 className={styles.title}>Tests</H1>\n <Separator isPresentational className={styles.separator} />\n <AlertCard\n level=\"info\"\n title=\"There are no\n tests for this Component. Learn how to add tests:\"\n >\n <MDXLayout>\n <EmptyStateTemplate />\n </MDXLayout>\n </AlertCard>\n </div>\n </div>\n );\n }\n\n if (testResults === null || testData?.testsResults === null) {\n return (\n <EmptyBox\n title=\"This component doesn’t have any tests.\"\n linkText=\"Learn how to add tests to your components\"\n link=\"https://harmony-docs.bit.dev/testing/overview/\"\n />\n );\n }\n\n return (\n <div className={classNames(styles.testsPage, className)}>\n <div>\n <H1 className={styles.title}>Tests</H1>\n <Separator isPresentational className={styles.separator} />\n <TestTable testResults={testResults} className={styles.testBlock} />\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["tests-page.tsx"],"names":["TESTS_SUBSCRIPTION_CHANGED","GET_COMPONENT","TestsPage","className","emptyState","component","ComponentContext","onTestsChanged","variables","id","toString","data","_legacy","name","testData","testsChanged","getHost","getTests","testResults","testsResults","testFiles","loading","env","environment","EmptyStateTemplate","get","host","styles","testsPage","title","separator","testBlock"],"mappings":"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","sourcesContent":["import { useQuery, useSubscription, gql } from '@apollo/client';\nimport { ComponentContext } from '@teambit/component';\nimport { H1 } from '@teambit/documenter.ui.heading';\nimport { Separator } from '@teambit/design.ui.separator';\nimport { EmptyBox } from '@teambit/design.ui.empty-box';\nimport { MDXLayout } from '@teambit/mdx.ui.mdx-layout';\nimport { AlertCard } from '@teambit/design.ui.alert-card';\nimport { TestLoader } from '@teambit/defender.ui.test-loader';\nimport classNames from 'classnames';\nimport React, { HTMLAttributes, useContext } from 'react';\nimport { TestTable } from '@teambit/defender.ui.test-table';\nimport { EmptyStateSlot } from '../tester.ui.runtime';\nimport styles from './tests-page.module.scss';\n\nconst TESTS_SUBSCRIPTION_CHANGED = gql`\n subscription OnTestsChanged($id: String!) {\n testsChanged(id: $id) {\n testsResults {\n testFiles {\n file\n duration\n pass\n failed\n pending\n errorStr\n tests {\n ancestor\n duration\n status\n name\n error\n }\n }\n }\n }\n }\n`;\n\nconst GET_COMPONENT = gql`\n query ($id: String!) {\n getHost {\n id # for GQL caching\n getTests(id: $id) {\n loading\n testsResults {\n testFiles {\n file\n duration\n pass\n failed\n pending\n errorStr\n tests {\n ancestor\n duration\n status\n name\n error\n }\n }\n }\n }\n }\n }\n`;\n\ntype TestsPageProps = {\n emptyState: EmptyStateSlot;\n} & HTMLAttributes<HTMLDivElement>;\n\nexport function TestsPage({ className, emptyState }: TestsPageProps) {\n const component = useContext(ComponentContext);\n const onTestsChanged = useSubscription(TESTS_SUBSCRIPTION_CHANGED, { variables: { id: component.id.toString() } });\n const { data } = useQuery(GET_COMPONENT, {\n variables: { id: component.id._legacy.name },\n });\n\n const testData = onTestsChanged.data?.testsChanged || data?.getHost?.getTests;\n const testResults = testData?.testsResults?.testFiles;\n\n // TODO: change loading EmptyBox\n if (testData?.loading) return <TestLoader />;\n\n const env = component.environment?.id;\n const EmptyStateTemplate = emptyState.get(env || '');\n\n if (\n (testResults === null || testData?.testsResults === null) &&\n component.host === 'teambit.workspace/workspace' &&\n EmptyStateTemplate\n ) {\n return (\n <div className={classNames(styles.testsPage, className)}>\n <div>\n <H1 className={styles.title}>Tests</H1>\n <Separator isPresentational className={styles.separator} />\n <AlertCard\n level=\"info\"\n title=\"There are no\n tests for this Component. Learn how to add tests:\"\n >\n <MDXLayout>\n <EmptyStateTemplate />\n </MDXLayout>\n </AlertCard>\n </div>\n </div>\n );\n }\n\n if (testResults === null || testData?.testsResults === null) {\n return (\n <EmptyBox\n title=\"This component doesn’t have any tests.\"\n linkText=\"Learn how to add tests to your components\"\n link=\"https://harmony-docs.bit.dev/testing/overview/\"\n />\n );\n }\n\n return (\n <div className={classNames(styles.testsPage, className)}>\n <div>\n <H1 className={styles.title}>Tests</H1>\n <Separator isPresentational className={styles.separator} />\n <TestTable testResults={testResults} className={styles.testBlock} />\n </div>\n </div>\n );\n}\n"]}
@@ -42,11 +42,9 @@ function testsResultsToJUnitFormat(components) {
42
42
  }
43
43
 
44
44
  (_compResult$results3 = compResult.results) === null || _compResult$results3 === void 0 ? void 0 : _compResult$results3.testFiles.forEach(testFile => {
45
- var _testFile$error;
46
-
47
- if ((_testFile$error = testFile.error) !== null && _testFile$error !== void 0 && _testFile$error.error) {
45
+ if (testFile.error) {
48
46
  const testCase = suite.testCase().className(testFile.file).name(testFile.file);
49
- testCase.error((0, _stripAnsi().default)(testFile.error.error));
47
+ testCase.error((0, _stripAnsi().default)(testFile.error.message));
50
48
  }
51
49
 
52
50
  testFile.tests.forEach(test => {
@@ -1 +1 @@
1
- {"version":3,"sources":["junit-generator.ts"],"names":["testsResultsToJUnitFormat","components","builder","junitReportBuilder","newBuilder","forEach","compResult","suite","testSuite","name","componentId","toString","results","start","timestamp","Date","toISOString","testFiles","testFile","error","testCase","className","file","tests","test","failure","status","skipped","duration","time","build"],"mappings":";;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGO,SAASA,yBAAT,CAAmCC,UAAnC,EAA4E;AACjF,QAAMC,OAAO,GAAGC,8BAAmBC,UAAnB,EAAhB;;AACAH,EAAAA,UAAU,CAACI,OAAX,CAAoBC,UAAD,IAAgB;AAAA;;AACjC,UAAMC,KAAK,GAAGL,OAAO,CAACM,SAAR,GAAoBC,IAApB,CAAyBH,UAAU,CAACI,WAAX,CAAuBC,QAAvB,EAAzB,CAAd;;AACA,+BAAIL,UAAU,CAACM,OAAf,gDAAI,oBAAoBC,KAAxB,EAA+B;AAAA;;AAC7BN,MAAAA,KAAK,CAACO,SAAN,CAAgB,IAAIC,IAAJ,yBAAST,UAAU,CAACM,OAApB,yDAAS,qBAAoBC,KAA7B,EAAoCG,WAApC,EAAhB;AACD;;AACD,4BAAAV,UAAU,CAACM,OAAX,8EAAoBK,SAApB,CAA8BZ,OAA9B,CAAuCa,QAAD,IAAc;AAAA;;AAClD,6BAAIA,QAAQ,CAACC,KAAb,4CAAI,gBAAgBA,KAApB,EAA2B;AACzB,cAAMC,QAAQ,GAAGb,KAAK,CAACa,QAAN,GAAiBC,SAAjB,CAA2BH,QAAQ,CAACI,IAApC,EAA0Cb,IAA1C,CAA+CS,QAAQ,CAACI,IAAxD,CAAjB;AACAF,QAAAA,QAAQ,CAACD,KAAT,CAAe,0BAAUD,QAAQ,CAACC,KAAT,CAAeA,KAAzB,CAAf;AACD;;AACDD,MAAAA,QAAQ,CAACK,KAAT,CAAelB,OAAf,CAAwBmB,IAAD,IAAU;AAC/B,cAAMJ,QAAQ,GAAGb,KAAK,CAACa,QAAN,GAAiBC,SAAjB,CAA2BH,QAAQ,CAACI,IAApC,EAA0Cb,IAA1C,CAA+Ce,IAAI,CAACf,IAApD,CAAjB;;AACA,YAAIe,IAAI,CAACL,KAAT,EAAgB;AACdC,UAAAA,QAAQ,CAACD,KAAT,CAAe,0BAAUK,IAAI,CAACL,KAAf,CAAf;AACD;;AACD,YAAIK,IAAI,CAACC,OAAT,EAAkB;AAChBL,UAAAA,QAAQ,CAACK,OAAT,CAAiB,0BAAUD,IAAI,CAACC,OAAf,CAAjB;AACD;;AACD,YAAID,IAAI,CAACE,MAAL,KAAgB,SAAhB,IAA6BF,IAAI,CAACE,MAAL,KAAgB,SAAjD,EAA4D;AAC1DN,UAAAA,QAAQ,CAACO,OAAT;AACD;;AACD,YAAIH,IAAI,CAACI,QAAT,EAAmB;AACjBR,UAAAA,QAAQ,CAACS,IAAT,CAAcL,IAAI,CAACI,QAAL,GAAgB,IAA9B;AACD;AACF,OAdD;AAeD,KApBD;AAqBD,GA1BD;AA2BA,SAAO1B,OAAO,CAAC4B,KAAR,EAAP;AACD","sourcesContent":["import junitReportBuilder from 'junit-report-builder';\nimport stripAnsi from 'strip-ansi';\nimport { ComponentsResults } from '../tester';\n\nexport function testsResultsToJUnitFormat(components: ComponentsResults[]): string {\n const builder = junitReportBuilder.newBuilder();\n components.forEach((compResult) => {\n const suite = builder.testSuite().name(compResult.componentId.toString());\n if (compResult.results?.start) {\n suite.timestamp(new Date(compResult.results?.start).toISOString());\n }\n compResult.results?.testFiles.forEach((testFile) => {\n if (testFile.error?.error) {\n const testCase = suite.testCase().className(testFile.file).name(testFile.file);\n testCase.error(stripAnsi(testFile.error.error as string));\n }\n testFile.tests.forEach((test) => {\n const testCase = suite.testCase().className(testFile.file).name(test.name);\n if (test.error) {\n testCase.error(stripAnsi(test.error));\n }\n if (test.failure) {\n testCase.failure(stripAnsi(test.failure));\n }\n if (test.status === 'skipped' || test.status === 'pending') {\n testCase.skipped();\n }\n if (test.duration) {\n testCase.time(test.duration / 1000);\n }\n });\n });\n });\n return builder.build();\n}\n"]}
1
+ {"version":3,"sources":["junit-generator.ts"],"names":["testsResultsToJUnitFormat","components","builder","junitReportBuilder","newBuilder","forEach","compResult","suite","testSuite","name","componentId","toString","results","start","timestamp","Date","toISOString","testFiles","testFile","error","testCase","className","file","message","tests","test","failure","status","skipped","duration","time","build"],"mappings":";;;;;;;;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AACA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAGO,SAASA,yBAAT,CAAmCC,UAAnC,EAA4E;AACjF,QAAMC,OAAO,GAAGC,8BAAmBC,UAAnB,EAAhB;;AACAH,EAAAA,UAAU,CAACI,OAAX,CAAoBC,UAAD,IAAgB;AAAA;;AACjC,UAAMC,KAAK,GAAGL,OAAO,CAACM,SAAR,GAAoBC,IAApB,CAAyBH,UAAU,CAACI,WAAX,CAAuBC,QAAvB,EAAzB,CAAd;;AACA,+BAAIL,UAAU,CAACM,OAAf,gDAAI,oBAAoBC,KAAxB,EAA+B;AAAA;;AAC7BN,MAAAA,KAAK,CAACO,SAAN,CAAgB,IAAIC,IAAJ,yBAAST,UAAU,CAACM,OAApB,yDAAS,qBAAoBC,KAA7B,EAAoCG,WAApC,EAAhB;AACD;;AACD,4BAAAV,UAAU,CAACM,OAAX,8EAAoBK,SAApB,CAA8BZ,OAA9B,CAAuCa,QAAD,IAAc;AAClD,UAAIA,QAAQ,CAACC,KAAb,EAAoB;AAClB,cAAMC,QAAQ,GAAGb,KAAK,CAACa,QAAN,GAAiBC,SAAjB,CAA2BH,QAAQ,CAACI,IAApC,EAA0Cb,IAA1C,CAA+CS,QAAQ,CAACI,IAAxD,CAAjB;AACAF,QAAAA,QAAQ,CAACD,KAAT,CAAe,0BAAUD,QAAQ,CAACC,KAAT,CAAeI,OAAzB,CAAf;AACD;;AACDL,MAAAA,QAAQ,CAACM,KAAT,CAAenB,OAAf,CAAwBoB,IAAD,IAAU;AAC/B,cAAML,QAAQ,GAAGb,KAAK,CAACa,QAAN,GAAiBC,SAAjB,CAA2BH,QAAQ,CAACI,IAApC,EAA0Cb,IAA1C,CAA+CgB,IAAI,CAAChB,IAApD,CAAjB;;AACA,YAAIgB,IAAI,CAACN,KAAT,EAAgB;AACdC,UAAAA,QAAQ,CAACD,KAAT,CAAe,0BAAUM,IAAI,CAACN,KAAf,CAAf;AACD;;AACD,YAAIM,IAAI,CAACC,OAAT,EAAkB;AAChBN,UAAAA,QAAQ,CAACM,OAAT,CAAiB,0BAAUD,IAAI,CAACC,OAAf,CAAjB;AACD;;AACD,YAAID,IAAI,CAACE,MAAL,KAAgB,SAAhB,IAA6BF,IAAI,CAACE,MAAL,KAAgB,SAAjD,EAA4D;AAC1DP,UAAAA,QAAQ,CAACQ,OAAT;AACD;;AACD,YAAIH,IAAI,CAACI,QAAT,EAAmB;AACjBT,UAAAA,QAAQ,CAACU,IAAT,CAAcL,IAAI,CAACI,QAAL,GAAgB,IAA9B;AACD;AACF,OAdD;AAeD,KApBD;AAqBD,GA1BD;AA2BA,SAAO3B,OAAO,CAAC6B,KAAR,EAAP;AACD","sourcesContent":["import junitReportBuilder from 'junit-report-builder';\nimport stripAnsi from 'strip-ansi';\nimport { ComponentsResults } from '../tester';\n\nexport function testsResultsToJUnitFormat(components: ComponentsResults[]): string {\n const builder = junitReportBuilder.newBuilder();\n components.forEach((compResult) => {\n const suite = builder.testSuite().name(compResult.componentId.toString());\n if (compResult.results?.start) {\n suite.timestamp(new Date(compResult.results?.start).toISOString());\n }\n compResult.results?.testFiles.forEach((testFile) => {\n if (testFile.error) {\n const testCase = suite.testCase().className(testFile.file).name(testFile.file);\n testCase.error(stripAnsi(testFile.error.message as string));\n }\n testFile.tests.forEach((test) => {\n const testCase = suite.testCase().className(testFile.file).name(test.name);\n if (test.error) {\n testCase.error(stripAnsi(test.error));\n }\n if (test.failure) {\n testCase.failure(stripAnsi(test.failure));\n }\n if (test.status === 'skipped' || test.status === 'pending') {\n testCase.skipped();\n }\n if (test.duration) {\n testCase.time(test.duration / 1000);\n }\n });\n });\n });\n return builder.build();\n}\n"]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@teambit/tester",
3
- "version": "0.0.657",
3
+ "version": "0.0.660",
4
4
  "homepage": "https://bit.dev/teambit/defender/tester",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.defender",
8
8
  "name": "tester",
9
- "version": "0.0.657"
9
+ "version": "0.0.660"
10
10
  },
11
11
  "dependencies": {
12
12
  "chalk": "2.4.2",
@@ -24,20 +24,20 @@
24
24
  "@babel/runtime": "7.12.18",
25
25
  "core-js": "^3.0.0",
26
26
  "@teambit/documenter.ui.heading": "4.1.1",
27
- "@teambit/cli": "0.0.448",
28
- "@teambit/logger": "0.0.538",
29
- "@teambit/workspace": "0.0.657",
30
- "@teambit/component": "0.0.657",
31
- "@teambit/graphql": "0.0.657",
32
- "@teambit/builder": "0.0.657",
33
- "@teambit/dev-files": "0.0.657",
34
- "@teambit/envs": "0.0.657",
35
- "@teambit/tests-results": "0.0.95",
36
- "@teambit/ui": "0.0.657",
37
- "@teambit/compiler": "0.0.657",
27
+ "@teambit/cli": "0.0.449",
28
+ "@teambit/logger": "0.0.539",
29
+ "@teambit/workspace": "0.0.660",
30
+ "@teambit/component": "0.0.660",
31
+ "@teambit/graphql": "0.0.660",
32
+ "@teambit/builder": "0.0.660",
33
+ "@teambit/dev-files": "0.0.660",
34
+ "@teambit/envs": "0.0.660",
35
+ "@teambit/tests-results": "0.0.96",
36
+ "@teambit/ui": "0.0.660",
37
+ "@teambit/compiler": "0.0.660",
38
38
  "@teambit/bit-error": "0.0.394",
39
39
  "@teambit/defender.ui.test-loader": "0.0.490",
40
- "@teambit/defender.ui.test-table": "0.0.493",
40
+ "@teambit/defender.ui.test-table": "0.0.494",
41
41
  "@teambit/design.ui.alert-card": "0.0.14",
42
42
  "@teambit/design.ui.empty-box": "0.0.353",
43
43
  "@teambit/design.ui.separator": "0.0.351",
@@ -57,7 +57,7 @@
57
57
  },
58
58
  "peerDependencies": {
59
59
  "@apollo/client": "^3.0.0",
60
- "@teambit/legacy": "1.0.227",
60
+ "@teambit/legacy": "1.0.228",
61
61
  "react-dom": "^16.8.0 || ^17.0.0",
62
62
  "react": "^16.8.0 || ^17.0.0"
63
63
  },
@@ -85,7 +85,7 @@
85
85
  "react": "-"
86
86
  },
87
87
  "peerDependencies": {
88
- "@teambit/legacy": "1.0.227",
88
+ "@teambit/legacy": "1.0.228",
89
89
  "react-dom": "^16.8.0 || ^17.0.0",
90
90
  "react": "^16.8.0 || ^17.0.0"
91
91
  }
package/test.cmd.tsx CHANGED
@@ -43,7 +43,6 @@ export class TestCmd implements Command {
43
43
  [userPattern]: [string],
44
44
  { watch = false, debug = false, all = false, env, scope, junit, coverage = false }: TestFlags
45
45
  ) {
46
- this.logger.off();
47
46
  const timer = Timer.create();
48
47
  const scopeName = typeof scope === 'string' ? scope : undefined;
49
48
  timer.start();
@@ -77,6 +76,10 @@ export class TestCmd implements Command {
77
76
 
78
77
  let code = 0;
79
78
  if (watch && !debug) {
79
+ // avoid turning off the logger for non-watch scenario. otherwise, when this aspect throws errors, they'll be
80
+ // swallowed. (Jest errors are shown regardless via Jest, but if the tester is unable to run Jest in the first
81
+ // place, these errors won't be shown)
82
+ this.logger.off();
80
83
  await this.tester.watch(components, {
81
84
  watch,
82
85
  debug,
@@ -91,7 +94,7 @@ export class TestCmd implements Command {
91
94
  junit,
92
95
  coverage,
93
96
  });
94
- tests?.results?.forEach((test) => (test.data?.errors?.length ? (code = 1) : null));
97
+ if (tests.hasErrors()) code = 1;
95
98
  }
96
99
  const { seconds } = timer.stop();
97
100
 
@@ -100,9 +103,7 @@ export class TestCmd implements Command {
100
103
  code,
101
104
  data: (
102
105
  <Box>
103
- <Text>tested </Text>
104
- <Text color="cyan">{components.length} </Text>
105
- <Text>components in </Text>
106
+ <Text>test has been completed in </Text>
106
107
  <Text color="cyan">{seconds} </Text>
107
108
  <Text>seconds.</Text>
108
109
  </Box>
@@ -12,7 +12,6 @@ import { Tester, Tests, CallbackFn } from './tester';
12
12
  import { TesterAspect } from './tester.aspect';
13
13
  import { TesterOptions } from './tester.main.runtime';
14
14
  import { detectTestFiles } from './utils';
15
- import { NoTestFilesFound } from './exceptions';
16
15
 
17
16
  const chalk = require('chalk');
18
17
 
@@ -112,7 +111,10 @@ export class TesterService implements EnvService<Tests, TesterDescriptor> {
112
111
  return acc;
113
112
  }, 0);
114
113
 
115
- if (testCount === 0 && !options.ui) throw new NoTestFilesFound(this.patterns.join(','));
114
+ if (testCount === 0 && !options.ui) {
115
+ this.logger.consoleWarning(`no tests found for environment ${chalk.cyan(context.id)}\n`);
116
+ return { components: [] };
117
+ }
116
118
 
117
119
  if (!options.ui)
118
120
  this.logger.console(`testing ${componentWithTests} components with environment ${chalk.cyan(context.id)}\n`);
@@ -158,10 +160,6 @@ export class TesterService implements EnvService<Tests, TesterDescriptor> {
158
160
 
159
161
  const results = await tester.test(testerContext);
160
162
 
161
- results.errors?.forEach((error) => {
162
- this.logger.console(error?.message);
163
- });
164
-
165
163
  return results;
166
164
  }
167
165
  }
package/ui/tests-page.tsx CHANGED
@@ -22,9 +22,7 @@ const TESTS_SUBSCRIPTION_CHANGED = gql`
22
22
  pass
23
23
  failed
24
24
  pending
25
- error {
26
- failureMessage
27
- }
25
+ errorStr
28
26
  tests {
29
27
  ancestor
30
28
  duration
@@ -39,7 +37,7 @@ const TESTS_SUBSCRIPTION_CHANGED = gql`
39
37
  `;
40
38
 
41
39
  const GET_COMPONENT = gql`
42
- query($id: String!) {
40
+ query ($id: String!) {
43
41
  getHost {
44
42
  id # for GQL caching
45
43
  getTests(id: $id) {
@@ -51,9 +49,7 @@ const GET_COMPONENT = gql`
51
49
  pass
52
50
  failed
53
51
  pending
54
- error {
55
- failureMessage
56
- }
52
+ errorStr
57
53
  tests {
58
54
  ancestor
59
55
  duration
@@ -10,9 +10,9 @@ export function testsResultsToJUnitFormat(components: ComponentsResults[]): stri
10
10
  suite.timestamp(new Date(compResult.results?.start).toISOString());
11
11
  }
12
12
  compResult.results?.testFiles.forEach((testFile) => {
13
- if (testFile.error?.error) {
13
+ if (testFile.error) {
14
14
  const testCase = suite.testCase().className(testFile.file).name(testFile.file);
15
- testCase.error(stripAnsi(testFile.error.error as string));
15
+ testCase.error(stripAnsi(testFile.error.message as string));
16
16
  }
17
17
  testFile.tests.forEach((test) => {
18
18
  const testCase = suite.testCase().className(testFile.file).name(test.name);