@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/{__preview-1645759524217.js → __preview-1646018619726.js} +0 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/test.cmd.js +6 -12
- package/dist/test.cmd.js.map +1 -1
- package/dist/tester.d.ts +4 -0
- package/dist/tester.graphql.js +1 -6
- package/dist/tester.graphql.js.map +1 -1
- package/dist/tester.service.js +8 -16
- package/dist/tester.service.js.map +1 -1
- package/dist/tester.task.js +4 -28
- package/dist/tester.task.js.map +1 -1
- package/dist/ui/tests-page.js +3 -7
- package/dist/ui/tests-page.js.map +1 -1
- package/dist/utils/junit-generator.js +2 -4
- package/dist/utils/junit-generator.js.map +1 -1
- package/package-tar/teambit-tester-0.0.660.tgz +0 -0
- package/package.json +16 -16
- package/test.cmd.tsx +6 -5
- package/tester.service.tsx +4 -6
- package/ui/tests-page.tsx +3 -7
- package/utils/junit-generator.ts +2 -2
- package/package-tar/teambit-tester-0.0.657.tgz +0 -0
|
File without changes
|
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;;
|
|
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
|
-
|
|
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, "
|
|
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
|
};
|
package/dist/test.cmd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["test.cmd.tsx"],"names":["TestCmd","constructor","tester","workspace","logger","render","userPattern","watch","debug","all","env","scope","junit","coverage","
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;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,UAAMC,KAAK,GAAGC,eAAMC,MAAN,EAAd;;AACA,UAAMC,SAAS,GAAG,OAAON,KAAP,KAAiB,QAAjB,GAA4BA,KAA5B,GAAoCO,SAAtD;AACAJ,IAAAA,KAAK,CAACK,KAAN;AACA,QAAI,CAAC,KAAKhB,SAAV,EAAqB,MAAM,KAAIiB,8BAAJ,GAAN;;AAErB,UAAMC,mBAAmB,GAAG,MAAM;AAChC,UAAI,CAACf,WAAD,IAAgB,CAACK,KAArB,EAA4B,OAAOO,SAAP;AAC5B,YAAMI,OAAO,GAAGhB,WAAW,IAAI,IAA/B;AACA,aAAOW,SAAS,GAAI,GAAEA,SAAU,IAAGK,OAAQ,EAA3B,GAA+BA,OAA/C;AACD,KAJD;;AAKA,UAAMC,gBAAgB,GAAGF,mBAAmB,EAA5C;AACA,UAAMG,UAAU,GAAG,MAAM,KAAKrB,SAAL,CAAesB,wBAAf,CAAwChB,GAAxC,EAA6Cc,gBAA7C,EAA+D,IAA/D,CAAzB;;AACA,QAAI,CAACC,UAAU,CAACE,MAAhB,EAAwB;AACtB,UAAIpB,WAAJ,EAAiB,MAAM,KAAIqB,mCAAJ,EAAyBrB,WAAzB,CAAN;AACjB,aAAO;AACLsB,QAAAA,IAAI,EAAE,CADD;AAELC,QAAAA,IAAI,eACF,+BAAC,UAAD,qBACE,+BAAC,WAAD;AAAM,UAAA,IAAI;AAAV,4KAE6D,GAF7D,CADF;AAHG,OAAP;AAWD;;AAED,SAAKzB,MAAL,CAAY0B,OAAZ,CACG,oBAAmBN,UAAU,CAACE,MAAO,6BAA4BK,iBAAMC,IAAN,CAAW,KAAK7B,SAAL,CAAe8B,IAA1B,CAAgC,GADpG;AAIA,QAAIL,IAAI,GAAG,CAAX;;AACA,QAAIrB,KAAK,IAAI,CAACC,KAAd,EAAqB;AACnB;AACA;AACA;AACA,WAAKJ,MAAL,CAAY8B,GAAZ;AACA,YAAM,KAAKhC,MAAL,CAAYK,KAAZ,CAAkBiB,UAAlB,EAA8B;AAClCjB,QAAAA,KADkC;AAElCC,QAAAA,KAFkC;AAGlCE,QAAAA,GAHkC;AAIlCG,QAAAA;AAJkC,OAA9B,CAAN;AAMD,KAXD,MAWO;AACL,YAAMsB,KAAK,GAAG,MAAM,KAAKjC,MAAL,CAAYkC,IAAZ,CAAiBZ,UAAjB,EAA6B;AAC/CjB,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;AAOA,UAAIsB,KAAK,CAACE,SAAN,EAAJ,EAAuBT,IAAI,GAAG,CAAP;AACxB;;AACD,UAAM;AAAEU,MAAAA;AAAF,QAAcxB,KAAK,CAACyB,IAAN,EAApB;AAEA,QAAIhC,KAAJ,EAAW,oBAAO,+BAAC,UAAD,OAAP;AACX,WAAO;AACLqB,MAAAA,IADK;AAELC,MAAAA,IAAI,eACF,+BAAC,UAAD,qBACE,+BAAC,WAAD,sCADF,eAEE,+BAAC,WAAD;AAAM,QAAA,KAAK,EAAC;AAAZ,SAAoBS,OAApB,MAFF,eAGE,+BAAC,WAAD,mBAHF;AAHG,KAAP;AAUD;;AAzFqC","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
package/dist/tester.graphql.js
CHANGED
|
@@ -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
|
|
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"]}
|
package/dist/tester.service.js
CHANGED
|
@@ -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
|
-
|
|
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"]}
|
package/dist/tester.task.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
};
|
package/dist/tester.task.js.map
CHANGED
|
@@ -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","
|
|
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"]}
|
package/dist/ui/tests-page.js
CHANGED
|
@@ -141,9 +141,7 @@ const TESTS_SUBSCRIPTION_CHANGED = (0, _client().gql)`
|
|
|
141
141
|
pass
|
|
142
142
|
failed
|
|
143
143
|
pending
|
|
144
|
-
|
|
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
|
-
|
|
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":";;;;;;;;;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;;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;;AACA;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;;;;;;AAEA,MAAMA,0BAA0B,GAAG,kBAAI;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA
|
|
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
|
-
|
|
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.
|
|
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;
|
|
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"]}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/tester",
|
|
3
|
-
"version": "0.0.
|
|
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.
|
|
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.
|
|
28
|
-
"@teambit/logger": "0.0.
|
|
29
|
-
"@teambit/workspace": "0.0.
|
|
30
|
-
"@teambit/component": "0.0.
|
|
31
|
-
"@teambit/graphql": "0.0.
|
|
32
|
-
"@teambit/builder": "0.0.
|
|
33
|
-
"@teambit/dev-files": "0.0.
|
|
34
|
-
"@teambit/envs": "0.0.
|
|
35
|
-
"@teambit/tests-results": "0.0.
|
|
36
|
-
"@teambit/ui": "0.0.
|
|
37
|
-
"@teambit/compiler": "0.0.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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>
|
|
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>
|
package/tester.service.tsx
CHANGED
|
@@ -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)
|
|
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
|
-
|
|
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
|
-
|
|
55
|
-
failureMessage
|
|
56
|
-
}
|
|
52
|
+
errorStr
|
|
57
53
|
tests {
|
|
58
54
|
ancestor
|
|
59
55
|
duration
|
package/utils/junit-generator.ts
CHANGED
|
@@ -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
|
|
13
|
+
if (testFile.error) {
|
|
14
14
|
const testCase = suite.testCase().className(testFile.file).name(testFile.file);
|
|
15
|
-
testCase.error(stripAnsi(testFile.error.
|
|
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);
|
|
Binary file
|