@teambit/tester 1.0.1005 → 1.0.1007

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
- import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.defender_tester@1.0.1005/dist/tester.composition.js';
2
- import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.defender_tester@1.0.1005/dist/tester.docs.mdx';
1
+ import * as compositions_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.defender_tester@1.0.1007/dist/tester.composition.js';
2
+ import * as overview_0 from '/home/circleci/Library/Caches/Bit/capsules/8891be5ad/teambit.defender_tester@1.0.1007/dist/tester.docs.mdx';
3
3
 
4
4
  export const compositions = [compositions_0];
5
5
  export const overview = [overview_0];
@@ -31,10 +31,21 @@ export declare class TestCmd implements Command {
31
31
  group: string;
32
32
  options: CommandOptions;
33
33
  constructor(tester: TesterMain, workspace: Workspace, logger: Logger);
34
- report([userPattern]: [string], { watch, debug, all, env, scope, junit, coverage, unmodified, updateSnapshot, verbose, summary: summaryOnly, }: TestFlags): Promise<"" | {
34
+ report([userPatterns]: [string[]], { watch, debug, all, env, scope, junit, coverage, unmodified, updateSnapshot, verbose, summary: summaryOnly, }: TestFlags): Promise<"" | {
35
35
  code: number;
36
36
  data: string;
37
37
  }>;
38
- json([userPattern]: [string], { watch, debug, env, junit, coverage, unmodified, updateSnapshot, summary: summaryOnly, }: TestFlags): Promise<GenericObject>;
38
+ json([userPatterns]: [string[]], { watch, debug, env, junit, coverage, unmodified, updateSnapshot, summary: summaryOnly, }: TestFlags): Promise<GenericObject>;
39
+ /**
40
+ * resolve the components to test from the user input. the input entries can be either component patterns or paths
41
+ * of test files. when test-file paths are provided, also return their absolute paths so the tester runs only them.
42
+ */
43
+ private getComponentsToTest;
44
+ /**
45
+ * if the given entries are paths of existing files, resolve them to their owning components.
46
+ * returns undefined when none of the entries is an existing file, in which case they are treated as
47
+ * component patterns.
48
+ */
49
+ private getComponentsByTestFiles;
39
50
  }
40
51
  export {};
package/dist/test.cmd.js CHANGED
@@ -4,6 +4,20 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.TestCmd = void 0;
7
+ function _path() {
8
+ const data = _interopRequireDefault(require("path"));
9
+ _path = function () {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
14
+ function _fsExtra() {
15
+ const data = _interopRequireDefault(require("fs-extra"));
16
+ _fsExtra = function () {
17
+ return data;
18
+ };
19
+ return data;
20
+ }
7
21
  function _cli() {
8
22
  const data = require("@teambit/cli");
9
23
  _cli = function () {
@@ -18,6 +32,13 @@ function _chalk() {
18
32
  };
19
33
  return data;
20
34
  }
35
+ function _bitError() {
36
+ const data = require("@teambit/bit-error");
37
+ _bitError = function () {
38
+ return data;
39
+ };
40
+ return data;
41
+ }
21
42
  function _workspace() {
22
43
  const data = require("@teambit/workspace");
23
44
  _workspace = function () {
@@ -32,6 +53,13 @@ function _toolboxTime() {
32
53
  };
33
54
  return data;
34
55
  }
56
+ function _toolboxPath() {
57
+ const data = require("@teambit/toolbox.path.path");
58
+ _toolboxPath = function () {
59
+ return data;
60
+ };
61
+ return data;
62
+ }
35
63
  function _legacy() {
36
64
  const data = require("@teambit/legacy.constants");
37
65
  _legacy = function () {
@@ -57,15 +85,19 @@ class TestCmd {
57
85
  this.tester = tester;
58
86
  this.workspace = workspace;
59
87
  this.logger = logger;
60
- _defineProperty(this, "name", 'test [component-pattern]');
88
+ _defineProperty(this, "name", 'test [pattern-or-test-file...]');
61
89
  _defineProperty(this, "description", 'run component tests');
62
90
  _defineProperty(this, "extendedDescription", `executes tests using the testing framework configured by each component's environment (Jest, Mocha, etc.).
63
91
  by default only runs tests for new and modified components. use --unmodified to test all components.
92
+ to run specific test files only, pass their paths instead of a component pattern, e.g. "bit test path/to/comp/my-comp.spec.ts".
64
93
  supports watch mode, coverage reporting, and debug mode for development workflows.`);
65
94
  _defineProperty(this, "helpUrl", 'reference/testing/tester-overview');
66
95
  _defineProperty(this, "arguments", [{
67
- name: 'component-pattern',
68
- description: _legacy().COMPONENT_PATTERN_HELP
96
+ name: 'pattern-or-test-file...',
97
+ description: `one of two modes (multiple values are supported, separated by spaces):
98
+ 1) component pattern: ${_legacy().COMPONENT_PATTERN_HELP}
99
+ 2) test-file path: a path to a test file, to run only this file, e.g. "bit test path/to/comp/my-comp.spec.ts".
100
+ note that a directory path selects the component in that directory and runs all its tests, while a test-file path runs only that file`
69
101
  }]);
70
102
  _defineProperty(this, "alias", 'at');
71
103
  _defineProperty(this, "group", 'testing');
@@ -73,7 +105,7 @@ supports watch mode, coverage reporting, and debug mode for development workflow
73
105
  // TODO: we need to reduce this redundant casting every time.
74
106
  ]);
75
107
  }
76
- async report([userPattern], {
108
+ async report([userPatterns = []], {
77
109
  watch = false,
78
110
  debug = false,
79
111
  all = false,
@@ -97,14 +129,10 @@ supports watch mode, coverage reporting, and debug mode for development workflow
97
129
  }
98
130
  timer.start();
99
131
  if (!this.workspace) throw new (_workspace().OutsideWorkspaceError)();
100
- const getPatternWithScope = () => {
101
- if (!userPattern && !scope) return undefined;
102
- const pattern = userPattern || '**';
103
- return scopeName ? `${scopeName}/${pattern}` : pattern;
104
- };
105
- const patternWithScope = getPatternWithScope();
106
- // If pattern is provided, don't pass the unmodified flag as "all" - the pattern should take precedence
107
- const components = await this.workspace.getComponentsByUserInput(patternWithScope ? false : unmodified, patternWithScope, true);
132
+ const {
133
+ components,
134
+ testFiles
135
+ } = await this.getComponentsToTest(userPatterns, unmodified, scopeName);
108
136
  if (!components.length) {
109
137
  const data = (0, _cli().formatHint)(`no components found to test.\nuse "--unmodified" flag to test all components or specify the ids to test.\notherwise, only new and modified components will be tested`);
110
138
  return {
@@ -127,7 +155,8 @@ supports watch mode, coverage reporting, and debug mode for development workflow
127
155
  debug,
128
156
  env,
129
157
  coverage,
130
- updateSnapshot
158
+ updateSnapshot,
159
+ testFiles
131
160
  });
132
161
  } else {
133
162
  // testers such as Jest reassign `console.warn` to forward into `this.logger.warn` inside their `test()`,
@@ -141,7 +170,8 @@ supports watch mode, coverage reporting, and debug mode for development workflow
141
170
  env,
142
171
  junit,
143
172
  coverage,
144
- updateSnapshot
173
+ updateSnapshot,
174
+ testFiles
145
175
  });
146
176
  } finally {
147
177
  restore?.();
@@ -170,7 +200,7 @@ supports watch mode, coverage reporting, and debug mode for development workflow
170
200
  data
171
201
  };
172
202
  }
173
- async json([userPattern], {
203
+ async json([userPatterns = []], {
174
204
  watch = false,
175
205
  debug = false,
176
206
  env,
@@ -183,14 +213,10 @@ supports watch mode, coverage reporting, and debug mode for development workflow
183
213
  const timer = _toolboxTime().Timer.create();
184
214
  timer.start();
185
215
  if (!this.workspace) throw new (_workspace().OutsideWorkspaceError)();
186
- const getPatternWithScope = () => {
187
- if (!userPattern) return undefined;
188
- const pattern = userPattern || '**';
189
- return pattern;
190
- };
191
- const patternWithScope = getPatternWithScope();
192
- // If pattern is provided, don't pass the unmodified flag as "all" - the pattern should take precedence
193
- const components = await this.workspace.getComponentsByUserInput(patternWithScope ? false : unmodified, patternWithScope, true);
216
+ const {
217
+ components,
218
+ testFiles
219
+ } = await this.getComponentsToTest(userPatterns, unmodified);
194
220
  if (!components.length) {
195
221
  this.logger.info(`no components found to test.
196
222
  use "--unmodified" flag to test all components or specify the ids to test.
@@ -213,7 +239,8 @@ supports watch mode, coverage reporting, and debug mode for development workflow
213
239
  env,
214
240
  junit,
215
241
  coverage,
216
- updateSnapshot
242
+ updateSnapshot,
243
+ testFiles
217
244
  });
218
245
  } finally {
219
246
  restore();
@@ -267,6 +294,75 @@ supports watch mode, coverage reporting, and debug mode for development workflow
267
294
  data
268
295
  };
269
296
  }
297
+
298
+ /**
299
+ * resolve the components to test from the user input. the input entries can be either component patterns or paths
300
+ * of test files. when test-file paths are provided, also return their absolute paths so the tester runs only them.
301
+ */
302
+ async getComponentsToTest(userPatterns, unmodified, scopeName) {
303
+ const byTestFiles = await this.getComponentsByTestFiles(userPatterns);
304
+ if (byTestFiles) return byTestFiles;
305
+ const getPatternWithScope = () => {
306
+ if (!userPatterns.length && !scopeName) return undefined;
307
+ const pattern = userPatterns.length ? userPatterns.join(', ') : '**';
308
+ return scopeName ? `${scopeName}/${pattern}` : pattern;
309
+ };
310
+ const patternWithScope = getPatternWithScope();
311
+ // If pattern is provided, don't pass the unmodified flag as "all" - the pattern should take precedence
312
+ const components = await this.workspace.getComponentsByUserInput(patternWithScope ? false : unmodified, patternWithScope, true);
313
+ return {
314
+ components
315
+ };
316
+ }
317
+
318
+ /**
319
+ * if the given entries are paths of existing files, resolve them to their owning components.
320
+ * returns undefined when none of the entries is an existing file, in which case they are treated as
321
+ * component patterns.
322
+ */
323
+ async getComponentsByTestFiles(entries) {
324
+ if (!entries.length) return undefined;
325
+ const isFile = entry => {
326
+ const absPath = _path().default.resolve(entry);
327
+ try {
328
+ return _fsExtra().default.statSync(absPath).isFile();
329
+ } catch {
330
+ // e.g. the file doesn't exist or permission issues. treat as a non-file so it goes through the pattern flow.
331
+ return false;
332
+ }
333
+ };
334
+ const fileEntries = entries.filter(entry => isFile(entry));
335
+ if (!fileEntries.length) return undefined;
336
+ if (fileEntries.length < entries.length) {
337
+ const nonFiles = entries.filter(entry => !fileEntries.includes(entry));
338
+ throw new (_bitError().BitError)(`unable to mix test-file paths with component patterns. the following are not files: ${nonFiles.join(', ')}`);
339
+ }
340
+ const componentsById = {};
341
+ const testFiles = [];
342
+ for (const entry of fileEntries) {
343
+ const absPath = _path().default.resolve(entry);
344
+ const componentId = await this.workspace.getComponentIdByPath(absPath);
345
+ if (!componentId) {
346
+ throw new (_bitError().BitError)(`the file "${entry}" does not belong to any component in this workspace, unable to test it`);
347
+ }
348
+ const idStr = componentId.toString();
349
+ if (!componentsById[idStr]) {
350
+ componentsById[idStr] = await this.workspace.get(componentId);
351
+ }
352
+ const component = componentsById[idStr];
353
+ const testFilesOfComp = this.tester.getTestFiles(component);
354
+ const absPathLinux = (0, _toolboxPath().pathNormalizeToLinux)(absPath);
355
+ if (!testFilesOfComp.some(file => (0, _toolboxPath().pathNormalizeToLinux)(file.path) === absPathLinux)) {
356
+ const suggestion = testFilesOfComp.length ? `the test files of "${component.id.toStringWithoutVersion()}" are: ${testFilesOfComp.map(file => file.relative).join(', ')}` : `the component "${component.id.toStringWithoutVersion()}" has no test files`;
357
+ throw new (_bitError().BitError)(`the file "${entry}" is not a recognized test file. ${suggestion}`);
358
+ }
359
+ testFiles.push(absPath);
360
+ }
361
+ return {
362
+ components: Object.values(componentsById),
363
+ testFiles
364
+ };
365
+ }
270
366
  }
271
367
 
272
368
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["_cli","data","require","_chalk","_interopRequireDefault","_workspace","_toolboxTime","_legacy","_testOutputFormatter","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","TestCmd","constructor","tester","workspace","logger","name","description","COMPONENT_PATTERN_HELP","report","userPattern","watch","debug","all","env","scope","junit","coverage","unmodified","updateSnapshot","verbose","summary","summaryOnly","timer","Timer","create","scopeName","undefined","consoleWarning","start","OutsideWorkspaceError","getPatternWithScope","pattern","patternWithScope","components","getComponentsByUserInput","formatHint","code","console","chalk","cyan","tests","off","restore","silenceConsoleAndStdout","test","on","hasErrors","process","exitCode","seconds","stop","aggregateTestResults","failedDueToExitCode","formatTestReport","duration","json","info","aggregated","totals","componentsWithTests","map","c","id","toString","ignoreVersion","passed","failed","pending","hasError","componentsWithoutTests","componentsAffectedByEnvError","envErrors","envId","message","error","results","componentId","errors","exports","CONSOLE_METHODS","originalConsole","fromEntries","m","originalStdoutWrite","stdout","write","bind","originalStderrWrite","stderr","method","stubWrite","args","cb","find","a"],"sources":["test.cmd.ts"],"sourcesContent":["import type { Command, CommandOptions, GenericObject } from '@teambit/cli';\nimport { formatHint } from '@teambit/cli';\nimport chalk from 'chalk';\nimport type { Logger } from '@teambit/logger';\nimport type { Workspace } from '@teambit/workspace';\nimport { OutsideWorkspaceError } from '@teambit/workspace';\nimport { Timer } from '@teambit/toolbox.time.timer';\nimport { COMPONENT_PATTERN_HELP } from '@teambit/legacy.constants';\nimport type { TesterMain, TestResults } from './tester.main.runtime';\nimport { aggregateTestResults, formatTestReport } from './test-output-formatter';\n\ntype TestFlags = {\n watch: boolean;\n debug: boolean;\n all: boolean;\n unmodified: boolean;\n env?: string;\n scope?: string;\n junit?: string;\n coverage?: boolean;\n updateSnapshot: boolean;\n verbose?: boolean;\n summary?: boolean;\n};\n\nexport class TestCmd implements Command {\n name = 'test [component-pattern]';\n description = 'run component tests';\n extendedDescription = `executes tests using the testing framework configured by each component's environment (Jest, Mocha, etc.).\nby default only runs tests for new and modified components. use --unmodified to test all components.\nsupports watch mode, coverage reporting, and debug mode for development workflows.`;\n helpUrl = 'reference/testing/tester-overview';\n arguments = [\n {\n name: 'component-pattern',\n description: COMPONENT_PATTERN_HELP,\n },\n ];\n alias = 'at';\n group = 'testing';\n options = [\n ['w', 'watch', 'start the tester in watch mode.'],\n ['d', 'debug', 'start the tester in debug mode.'],\n ['a', 'all', 'DEPRECATED. (use --unmodified)'],\n ['u', 'unmodified', '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 components assigned the given env'],\n ['', 'update-snapshot', 'if supported by the tester, re-record every snapshot that fails during the test run'],\n [\n 's',\n 'scope <scope-name>',\n 'DEPRECATED. (use the pattern instead, e.g. \"scopeName/**\"). name of the scope to test',\n ],\n ['j', 'json', 'return the results in json format'],\n ['', 'verbose', 'list the component ids that have no tests (default collapses them into a count)'],\n ['', 'summary', 'suppress tester output, print only the final pass/fail headline (or summary object with --json)'],\n // TODO: we need to reduce this redundant casting every time.\n ] as CommandOptions;\n\n constructor(\n private tester: TesterMain,\n private workspace: Workspace,\n private logger: Logger\n ) {}\n\n async report(\n [userPattern]: [string],\n {\n watch = false,\n debug = false,\n all = false,\n env,\n scope,\n junit,\n coverage = false,\n unmodified = false,\n updateSnapshot = false,\n verbose = false,\n summary: summaryOnly = false,\n }: TestFlags\n ) {\n const timer = Timer.create();\n const scopeName = typeof scope === 'string' ? scope : undefined;\n if (scopeName) {\n this.logger.consoleWarning(\n `--scope is deprecated, use the pattern argument instead. e.g. \"scopeName/**\" for the entire scope`\n );\n }\n if (all) {\n unmodified = all;\n this.logger.consoleWarning(`--all is deprecated, use --unmodified instead`);\n }\n timer.start();\n if (!this.workspace) throw new OutsideWorkspaceError();\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 // If pattern is provided, don't pass the unmodified flag as \"all\" - the pattern should take precedence\n const components = await this.workspace.getComponentsByUserInput(\n patternWithScope ? false : unmodified,\n patternWithScope,\n true\n );\n if (!components.length) {\n const data = formatHint(\n `no components found to test.\\nuse \"--unmodified\" flag to test all components or specify the ids to test.\\notherwise, only new and modified components will be tested`\n );\n return {\n code: 0,\n data,\n };\n }\n\n if (!summaryOnly) {\n this.logger.console(\n `testing total of ${components.length} components in workspace '${chalk.cyan(this.workspace.name)}'`\n );\n }\n\n let code = 0;\n let tests: TestResults | undefined;\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 updateSnapshot,\n });\n } else {\n // testers such as Jest reassign `console.warn` to forward into `this.logger.warn` inside their `test()`,\n // bypassing our stdout/console monkey-patch. also turn the logger off so those re-routed calls don't surface.\n if (summaryOnly) this.logger.off();\n const restore = summaryOnly ? silenceConsoleAndStdout() : undefined;\n try {\n tests = await this.tester.test(components, {\n watch,\n debug,\n env,\n junit,\n coverage,\n updateSnapshot,\n });\n } finally {\n restore?.();\n if (summaryOnly) this.logger.on();\n }\n if (tests.hasErrors()) code = 1;\n if (process.exitCode && process.exitCode !== 0 && typeof process.exitCode === 'number') {\n // this is needed for testers such as \"vitest\", where it sets the exitCode to non zero when the coverage is not met.\n code = process.exitCode;\n }\n }\n const { seconds } = timer.stop();\n\n if (watch) return '';\n const summary = tests ? aggregateTestResults(tests, components) : undefined;\n const failedDueToExitCode = code !== 0 && !!tests && !tests.hasErrors();\n const data = summary\n ? `${summaryOnly ? '' : '\\n'}${formatTestReport(summary, { verbose, duration: `${seconds}s`, summaryOnly, failedDueToExitCode })}`\n : formatHint(`tests completed in ${seconds} seconds`);\n return {\n code,\n data,\n };\n }\n\n async json(\n [userPattern]: [string],\n {\n watch = false,\n debug = false,\n env,\n junit,\n coverage = false,\n unmodified = false,\n updateSnapshot = false,\n summary: summaryOnly = false,\n }: TestFlags\n ): Promise<GenericObject> {\n const timer = Timer.create();\n timer.start();\n if (!this.workspace) throw new OutsideWorkspaceError();\n\n const getPatternWithScope = () => {\n if (!userPattern) return undefined;\n const pattern = userPattern || '**';\n return pattern;\n };\n const patternWithScope = getPatternWithScope();\n // If pattern is provided, don't pass the unmodified flag as \"all\" - the pattern should take precedence\n const components = await this.workspace.getComponentsByUserInput(\n patternWithScope ? false : unmodified,\n patternWithScope,\n true\n );\n if (!components.length) {\n this.logger.info(`no components found to test.\n use \"--unmodified\" flag to test all components or specify the ids to test.\n otherwise, only new and modified components will be tested`);\n return {\n code: 0,\n data: [],\n };\n }\n\n let code = 0;\n // also disable the logger: testers like Jest reassign `console.warn` to `this.logger.warn`,\n // which bypasses the stdout/console silencer and can corrupt machine-readable JSON output.\n this.logger.off();\n const restore = silenceConsoleAndStdout();\n let tests: TestResults;\n try {\n tests = await this.tester.test(components, {\n watch,\n debug,\n env,\n junit,\n coverage,\n updateSnapshot,\n });\n } finally {\n restore();\n this.logger.on();\n }\n if (tests.hasErrors()) code = 1;\n if (process.exitCode && process.exitCode !== 0 && typeof process.exitCode === 'number') {\n // this is needed for testers such as \"vitest\", where it sets the exitCode to non zero when the coverage is not met.\n code = process.exitCode;\n }\n\n const aggregated = aggregateTestResults(tests, components);\n const summary = {\n totals: aggregated.totals,\n componentsWithTests: aggregated.componentsWithTests.map((c) => ({\n id: c.id.toString({ ignoreVersion: true }),\n passed: c.passed,\n failed: c.failed,\n pending: c.pending,\n hasError: c.hasError,\n })),\n componentsWithoutTests: aggregated.componentsWithoutTests.map((id) => id.toString({ ignoreVersion: true })),\n componentsAffectedByEnvError: aggregated.componentsAffectedByEnvError.map((id) =>\n id.toString({ ignoreVersion: true })\n ),\n envErrors: aggregated.envErrors.map((e) => ({ envId: e.envId, message: e.error.message })),\n };\n\n if (summaryOnly) {\n return { code, data: summary };\n }\n\n const data = tests.results.map((r) => ({\n data: {\n components: r.data?.components.map((c) => ({\n ...c,\n componentId: c.componentId.toString(),\n })),\n errors: r.data?.errors,\n },\n error: r.error,\n }));\n\n return {\n code,\n data,\n };\n }\n}\n\n/**\n * Disables all console logging (via console.*) and direct writes to\n * process.stdout / process.stderr. Returns a function that, when called,\n * restores everything back to normal.\n */\nfunction silenceConsoleAndStdout(): () => void {\n const CONSOLE_METHODS = ['log', 'warn', 'error', 'info', 'debug'] as const;\n const originalConsole = Object.fromEntries(\n // eslint-disable-next-line no-console\n CONSOLE_METHODS.map((m) => [m, console[m]])\n ) as Record<(typeof CONSOLE_METHODS)[number], (...args: any[]) => void>;\n const originalStdoutWrite = process.stdout.write.bind(process.stdout);\n const originalStderrWrite = process.stderr.write.bind(process.stderr);\n\n for (const method of CONSOLE_METHODS) {\n // eslint-disable-next-line no-console\n console[method] = () => {};\n }\n\n // process.stdout.write(chunk, encoding?, callback?) — callers may rely on the optional\n // callback firing. Invoke it so we don't leave writers hanging.\n const stubWrite = (...args: any[]): boolean => {\n const cb = args.find((a) => typeof a === 'function') as ((err?: Error | null) => void) | undefined;\n if (cb) cb();\n return true;\n };\n process.stdout.write = stubWrite as typeof process.stdout.write;\n process.stderr.write = stubWrite as typeof process.stderr.write;\n\n return () => {\n for (const method of CONSOLE_METHODS) {\n // eslint-disable-next-line no-console\n console[method] = originalConsole[method];\n }\n process.stdout.write = originalStdoutWrite;\n process.stderr.write = originalStderrWrite;\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_path","data","_interopRequireDefault","require","_fsExtra","_cli","_chalk","_bitError","_workspace","_toolboxTime","_toolboxPath","_legacy","_testOutputFormatter","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","TestCmd","constructor","tester","workspace","logger","name","description","COMPONENT_PATTERN_HELP","report","userPatterns","watch","debug","all","env","scope","junit","coverage","unmodified","updateSnapshot","verbose","summary","summaryOnly","timer","Timer","create","scopeName","undefined","consoleWarning","start","OutsideWorkspaceError","components","testFiles","getComponentsToTest","formatHint","code","console","chalk","cyan","tests","off","restore","silenceConsoleAndStdout","test","on","hasErrors","process","exitCode","seconds","stop","aggregateTestResults","failedDueToExitCode","formatTestReport","duration","json","info","aggregated","totals","componentsWithTests","map","c","id","toString","ignoreVersion","passed","failed","pending","hasError","componentsWithoutTests","componentsAffectedByEnvError","envErrors","envId","message","error","results","componentId","errors","byTestFiles","getComponentsByTestFiles","getPatternWithScope","pattern","join","patternWithScope","getComponentsByUserInput","entries","isFile","entry","absPath","path","resolve","fs","statSync","fileEntries","nonFiles","includes","BitError","componentsById","getComponentIdByPath","idStr","get","component","testFilesOfComp","getTestFiles","absPathLinux","pathNormalizeToLinux","some","file","suggestion","toStringWithoutVersion","relative","values","exports","CONSOLE_METHODS","originalConsole","fromEntries","m","originalStdoutWrite","stdout","write","bind","originalStderrWrite","stderr","method","stubWrite","args","cb","find","a"],"sources":["test.cmd.ts"],"sourcesContent":["import path from 'path';\nimport fs from 'fs-extra';\nimport type { Command, CommandOptions, GenericObject } from '@teambit/cli';\nimport { formatHint } from '@teambit/cli';\nimport chalk from 'chalk';\nimport { BitError } from '@teambit/bit-error';\nimport type { Component } from '@teambit/component';\nimport type { Logger } from '@teambit/logger';\nimport type { Workspace } from '@teambit/workspace';\nimport { OutsideWorkspaceError } from '@teambit/workspace';\nimport { Timer } from '@teambit/toolbox.time.timer';\nimport { pathNormalizeToLinux } from '@teambit/toolbox.path.path';\nimport { COMPONENT_PATTERN_HELP } from '@teambit/legacy.constants';\nimport type { TesterMain, TestResults } from './tester.main.runtime';\nimport { aggregateTestResults, formatTestReport } from './test-output-formatter';\n\ntype TestFlags = {\n watch: boolean;\n debug: boolean;\n all: boolean;\n unmodified: boolean;\n env?: string;\n scope?: string;\n junit?: string;\n coverage?: boolean;\n updateSnapshot: boolean;\n verbose?: boolean;\n summary?: boolean;\n};\n\nexport class TestCmd implements Command {\n name = 'test [pattern-or-test-file...]';\n description = 'run component tests';\n extendedDescription = `executes tests using the testing framework configured by each component's environment (Jest, Mocha, etc.).\nby default only runs tests for new and modified components. use --unmodified to test all components.\nto run specific test files only, pass their paths instead of a component pattern, e.g. \"bit test path/to/comp/my-comp.spec.ts\".\nsupports watch mode, coverage reporting, and debug mode for development workflows.`;\n helpUrl = 'reference/testing/tester-overview';\n arguments = [\n {\n name: 'pattern-or-test-file...',\n description: `one of two modes (multiple values are supported, separated by spaces):\n1) component pattern: ${COMPONENT_PATTERN_HELP}\n2) test-file path: a path to a test file, to run only this file, e.g. \"bit test path/to/comp/my-comp.spec.ts\".\nnote that a directory path selects the component in that directory and runs all its tests, while a test-file path runs only that file`,\n },\n ];\n alias = 'at';\n group = 'testing';\n options = [\n ['w', 'watch', 'start the tester in watch mode.'],\n ['d', 'debug', 'start the tester in debug mode.'],\n ['a', 'all', 'DEPRECATED. (use --unmodified)'],\n ['u', 'unmodified', '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 components assigned the given env'],\n ['', 'update-snapshot', 'if supported by the tester, re-record every snapshot that fails during the test run'],\n [\n 's',\n 'scope <scope-name>',\n 'DEPRECATED. (use the pattern instead, e.g. \"scopeName/**\"). name of the scope to test',\n ],\n ['j', 'json', 'return the results in json format'],\n ['', 'verbose', 'list the component ids that have no tests (default collapses them into a count)'],\n ['', 'summary', 'suppress tester output, print only the final pass/fail headline (or summary object with --json)'],\n // TODO: we need to reduce this redundant casting every time.\n ] as CommandOptions;\n\n constructor(\n private tester: TesterMain,\n private workspace: Workspace,\n private logger: Logger\n ) {}\n\n async report(\n [userPatterns = []]: [string[]],\n {\n watch = false,\n debug = false,\n all = false,\n env,\n scope,\n junit,\n coverage = false,\n unmodified = false,\n updateSnapshot = false,\n verbose = false,\n summary: summaryOnly = false,\n }: TestFlags\n ) {\n const timer = Timer.create();\n const scopeName = typeof scope === 'string' ? scope : undefined;\n if (scopeName) {\n this.logger.consoleWarning(\n `--scope is deprecated, use the pattern argument instead. e.g. \"scopeName/**\" for the entire scope`\n );\n }\n if (all) {\n unmodified = all;\n this.logger.consoleWarning(`--all is deprecated, use --unmodified instead`);\n }\n timer.start();\n if (!this.workspace) throw new OutsideWorkspaceError();\n\n const { components, testFiles } = await this.getComponentsToTest(userPatterns, unmodified, scopeName);\n if (!components.length) {\n const data = formatHint(\n `no components found to test.\\nuse \"--unmodified\" flag to test all components or specify the ids to test.\\notherwise, only new and modified components will be tested`\n );\n return {\n code: 0,\n data,\n };\n }\n\n if (!summaryOnly) {\n this.logger.console(\n `testing total of ${components.length} components in workspace '${chalk.cyan(this.workspace.name)}'`\n );\n }\n\n let code = 0;\n let tests: TestResults | undefined;\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 updateSnapshot,\n testFiles,\n });\n } else {\n // testers such as Jest reassign `console.warn` to forward into `this.logger.warn` inside their `test()`,\n // bypassing our stdout/console monkey-patch. also turn the logger off so those re-routed calls don't surface.\n if (summaryOnly) this.logger.off();\n const restore = summaryOnly ? silenceConsoleAndStdout() : undefined;\n try {\n tests = await this.tester.test(components, {\n watch,\n debug,\n env,\n junit,\n coverage,\n updateSnapshot,\n testFiles,\n });\n } finally {\n restore?.();\n if (summaryOnly) this.logger.on();\n }\n if (tests.hasErrors()) code = 1;\n if (process.exitCode && process.exitCode !== 0 && typeof process.exitCode === 'number') {\n // this is needed for testers such as \"vitest\", where it sets the exitCode to non zero when the coverage is not met.\n code = process.exitCode;\n }\n }\n const { seconds } = timer.stop();\n\n if (watch) return '';\n const summary = tests ? aggregateTestResults(tests, components) : undefined;\n const failedDueToExitCode = code !== 0 && !!tests && !tests.hasErrors();\n const data = summary\n ? `${summaryOnly ? '' : '\\n'}${formatTestReport(summary, { verbose, duration: `${seconds}s`, summaryOnly, failedDueToExitCode })}`\n : formatHint(`tests completed in ${seconds} seconds`);\n return {\n code,\n data,\n };\n }\n\n async json(\n [userPatterns = []]: [string[]],\n {\n watch = false,\n debug = false,\n env,\n junit,\n coverage = false,\n unmodified = false,\n updateSnapshot = false,\n summary: summaryOnly = false,\n }: TestFlags\n ): Promise<GenericObject> {\n const timer = Timer.create();\n timer.start();\n if (!this.workspace) throw new OutsideWorkspaceError();\n\n const { components, testFiles } = await this.getComponentsToTest(userPatterns, unmodified);\n if (!components.length) {\n this.logger.info(`no components found to test.\n use \"--unmodified\" flag to test all components or specify the ids to test.\n otherwise, only new and modified components will be tested`);\n return {\n code: 0,\n data: [],\n };\n }\n\n let code = 0;\n // also disable the logger: testers like Jest reassign `console.warn` to `this.logger.warn`,\n // which bypasses the stdout/console silencer and can corrupt machine-readable JSON output.\n this.logger.off();\n const restore = silenceConsoleAndStdout();\n let tests: TestResults;\n try {\n tests = await this.tester.test(components, {\n watch,\n debug,\n env,\n junit,\n coverage,\n updateSnapshot,\n testFiles,\n });\n } finally {\n restore();\n this.logger.on();\n }\n if (tests.hasErrors()) code = 1;\n if (process.exitCode && process.exitCode !== 0 && typeof process.exitCode === 'number') {\n // this is needed for testers such as \"vitest\", where it sets the exitCode to non zero when the coverage is not met.\n code = process.exitCode;\n }\n\n const aggregated = aggregateTestResults(tests, components);\n const summary = {\n totals: aggregated.totals,\n componentsWithTests: aggregated.componentsWithTests.map((c) => ({\n id: c.id.toString({ ignoreVersion: true }),\n passed: c.passed,\n failed: c.failed,\n pending: c.pending,\n hasError: c.hasError,\n })),\n componentsWithoutTests: aggregated.componentsWithoutTests.map((id) => id.toString({ ignoreVersion: true })),\n componentsAffectedByEnvError: aggregated.componentsAffectedByEnvError.map((id) =>\n id.toString({ ignoreVersion: true })\n ),\n envErrors: aggregated.envErrors.map((e) => ({ envId: e.envId, message: e.error.message })),\n };\n\n if (summaryOnly) {\n return { code, data: summary };\n }\n\n const data = tests.results.map((r) => ({\n data: {\n components: r.data?.components.map((c) => ({\n ...c,\n componentId: c.componentId.toString(),\n })),\n errors: r.data?.errors,\n },\n error: r.error,\n }));\n\n return {\n code,\n data,\n };\n }\n\n /**\n * resolve the components to test from the user input. the input entries can be either component patterns or paths\n * of test files. when test-file paths are provided, also return their absolute paths so the tester runs only them.\n */\n private async getComponentsToTest(\n userPatterns: string[],\n unmodified: boolean,\n scopeName?: string\n ): Promise<{ components: Component[]; testFiles?: string[] }> {\n const byTestFiles = await this.getComponentsByTestFiles(userPatterns);\n if (byTestFiles) return byTestFiles;\n const getPatternWithScope = () => {\n if (!userPatterns.length && !scopeName) return undefined;\n const pattern = userPatterns.length ? userPatterns.join(', ') : '**';\n return scopeName ? `${scopeName}/${pattern}` : pattern;\n };\n const patternWithScope = getPatternWithScope();\n // If pattern is provided, don't pass the unmodified flag as \"all\" - the pattern should take precedence\n const components = await this.workspace.getComponentsByUserInput(\n patternWithScope ? false : unmodified,\n patternWithScope,\n true\n );\n return { components };\n }\n\n /**\n * if the given entries are paths of existing files, resolve them to their owning components.\n * returns undefined when none of the entries is an existing file, in which case they are treated as\n * component patterns.\n */\n private async getComponentsByTestFiles(\n entries: string[]\n ): Promise<{ components: Component[]; testFiles: string[] } | undefined> {\n if (!entries.length) return undefined;\n const isFile = (entry: string) => {\n const absPath = path.resolve(entry);\n try {\n return fs.statSync(absPath).isFile();\n } catch {\n // e.g. the file doesn't exist or permission issues. treat as a non-file so it goes through the pattern flow.\n return false;\n }\n };\n const fileEntries = entries.filter((entry) => isFile(entry));\n if (!fileEntries.length) return undefined;\n if (fileEntries.length < entries.length) {\n const nonFiles = entries.filter((entry) => !fileEntries.includes(entry));\n throw new BitError(\n `unable to mix test-file paths with component patterns. the following are not files: ${nonFiles.join(', ')}`\n );\n }\n const componentsById: { [idStr: string]: Component } = {};\n const testFiles: string[] = [];\n for (const entry of fileEntries) {\n const absPath = path.resolve(entry);\n const componentId = await this.workspace.getComponentIdByPath(absPath);\n if (!componentId) {\n throw new BitError(`the file \"${entry}\" does not belong to any component in this workspace, unable to test it`);\n }\n const idStr = componentId.toString();\n if (!componentsById[idStr]) {\n componentsById[idStr] = await this.workspace.get(componentId);\n }\n const component = componentsById[idStr];\n const testFilesOfComp = this.tester.getTestFiles(component);\n const absPathLinux = pathNormalizeToLinux(absPath);\n if (!testFilesOfComp.some((file) => pathNormalizeToLinux(file.path) === absPathLinux)) {\n const suggestion = testFilesOfComp.length\n ? `the test files of \"${component.id.toStringWithoutVersion()}\" are: ${testFilesOfComp\n .map((file) => file.relative)\n .join(', ')}`\n : `the component \"${component.id.toStringWithoutVersion()}\" has no test files`;\n throw new BitError(`the file \"${entry}\" is not a recognized test file. ${suggestion}`);\n }\n testFiles.push(absPath);\n }\n return { components: Object.values(componentsById), testFiles };\n }\n}\n\n/**\n * Disables all console logging (via console.*) and direct writes to\n * process.stdout / process.stderr. Returns a function that, when called,\n * restores everything back to normal.\n */\nfunction silenceConsoleAndStdout(): () => void {\n const CONSOLE_METHODS = ['log', 'warn', 'error', 'info', 'debug'] as const;\n const originalConsole = Object.fromEntries(\n // eslint-disable-next-line no-console\n CONSOLE_METHODS.map((m) => [m, console[m]])\n ) as Record<(typeof CONSOLE_METHODS)[number], (...args: any[]) => void>;\n const originalStdoutWrite = process.stdout.write.bind(process.stdout);\n const originalStderrWrite = process.stderr.write.bind(process.stderr);\n\n for (const method of CONSOLE_METHODS) {\n // eslint-disable-next-line no-console\n console[method] = () => {};\n }\n\n // process.stdout.write(chunk, encoding?, callback?) — callers may rely on the optional\n // callback firing. Invoke it so we don't leave writers hanging.\n const stubWrite = (...args: any[]): boolean => {\n const cb = args.find((a) => typeof a === 'function') as ((err?: Error | null) => void) | undefined;\n if (cb) cb();\n return true;\n };\n process.stdout.write = stubWrite as typeof process.stdout.write;\n process.stderr.write = stubWrite as typeof process.stderr.write;\n\n return () => {\n for (const method of CONSOLE_METHODS) {\n // eslint-disable-next-line no-console\n console[method] = originalConsole[method];\n }\n process.stdout.write = originalStdoutWrite;\n process.stderr.write = originalStderrWrite;\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -52,6 +52,10 @@ export type TesterOptions = {
52
52
  * update snapshot if supported by the tester
53
53
  */
54
54
  updateSnapshot?: boolean;
55
+ /**
56
+ * absolute paths of specific test files to run. when provided, only these files are tested.
57
+ */
58
+ testFiles?: string[];
55
59
  callback?: CallbackFn;
56
60
  };
57
61
  type CoverageResults = {
@@ -1 +1 @@
1
- {"version":3,"names":["_fsExtra","data","_interopRequireDefault","require","_cli","_lodash","_envs","_logger","_workspace","_graphql","_builder","_ui","_lodash2","_devFiles","_test","_tester","_tester2","_tester3","_utils","_tester4","_junitGenerator","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","TesterMain","constructor","patterns","graphql","envs","workspace","service","task","devFiles","builder","test","components","opts","options","getOptions","envsRuntime","createEnvironment","env","runEnv","results","run","junit","generateJUnit","filePath","testsResults","map","envResult","flat","jUnit","testsResultsToJUnitFormat","compact","fs","outputFile","watch","onTestRunComplete","forEach","component","_testsResults","componentId","toString","uiWatch","list","debug","ui","getTestsResults","idHasVersion","entry","get","TesterAspect","id","isModified","getDataByAspect","tests","loading","coverage","getTestsResultsFromState","getPatterns","getComponentDevPatterns","calculateEnv","skipWarnings","inInstallContext","componentPatterns","getTestsDevPatterns","name","pattern","getDevPatternToRegister","bind","getTestFiles","detectTestFiles","defaults","merge","provider","cli","loggerAspect","config","logger","createLogger","testerService","TesterService","pubsub","registerService","tester","TesterTask","registerDevPattern","registerOnStart","watchOnStart","undefined","register","TestCmd","testerSchema","exports","MainRuntime","CLIAspect","EnvsAspect","WorkspaceAspect","LoggerAspect","GraphqlAspect","UIAspect","DevFilesAspect","BuilderAspect","addRuntime"],"sources":["tester.main.runtime.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport type { CLIMain } from '@teambit/cli';\nimport { CLIAspect, MainRuntime } from '@teambit/cli';\nimport type { Component, IComponent } from '@teambit/component';\nimport compact from 'lodash.compact';\nimport type { EnvsExecutionResult, EnvsMain } from '@teambit/envs';\nimport { EnvsAspect } from '@teambit/envs';\nimport type { LoggerMain } from '@teambit/logger';\nimport { LoggerAspect } from '@teambit/logger';\nimport type { Workspace } from '@teambit/workspace';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport type { GraphqlMain } from '@teambit/graphql';\nimport { GraphqlAspect } from '@teambit/graphql';\nimport type { BuilderMain } from '@teambit/builder';\nimport { BuilderAspect } from '@teambit/builder';\nimport type { UiMain } from '@teambit/ui';\nimport { UIAspect } from '@teambit/ui';\nimport { merge } from 'lodash';\nimport type { DevFilesMain } from '@teambit/dev-files';\nimport { DevFilesAspect } from '@teambit/dev-files';\nimport type { TestsResult } from '@teambit/tests-results';\nimport type { ComponentsResults, CallbackFn, Tests } from './tester';\nimport { TestCmd } from './test.cmd';\nimport { TesterAspect } from './tester.aspect';\nimport { TesterService } from './tester.service';\nimport { TesterTask } from './tester.task';\nimport { detectTestFiles } from './utils';\nimport { testerSchema } from './tester.graphql';\nimport { testsResultsToJUnitFormat } from './utils/junit-generator';\n\nexport type TesterExtensionConfig = {\n /**\n * regex of the text environment.\n */\n testRegex: string;\n\n /**\n * determine whether to watch on start.\n */\n watchOnStart: boolean;\n patterns: string[];\n};\n\nexport type TestResults = EnvsExecutionResult<Tests>;\n\nexport type TesterOptions = {\n /**\n * start the tester in watch mode.\n */\n watch: boolean;\n\n /**\n * start the tester in debug mode.\n */\n debug: boolean;\n\n /**\n * start the tester in debug mode.\n */\n ui?: boolean;\n\n /**\n * initiate the tester on given env.\n */\n env?: string;\n\n /**\n * generate JUnit files on the specified dir\n */\n junit?: string;\n\n /**\n * show code coverage\n */\n coverage?: boolean;\n\n /**\n * update snapshot if supported by the tester\n */\n updateSnapshot?: boolean;\n\n callback?: CallbackFn;\n};\n\ntype CoverageResults = {\n files: CoverageFile[];\n total: CoverageData;\n};\n\ntype CoverageStats = {\n pct: number;\n total: number;\n covered: number;\n skipped: number;\n};\n\ntype CoverageFile = {\n path: string;\n data: CoverageData;\n};\n\ntype CoverageData = {\n lines: CoverageStats;\n statements: CoverageStats;\n functions: CoverageStats;\n branches: CoverageStats;\n};\n\nexport class TesterMain {\n static runtime = MainRuntime;\n static dependencies = [\n CLIAspect,\n EnvsAspect,\n WorkspaceAspect,\n LoggerAspect,\n GraphqlAspect,\n UIAspect,\n DevFilesAspect,\n BuilderAspect,\n ];\n\n constructor(\n private patterns: string[],\n /**\n * graphql extension.\n */\n private graphql: GraphqlMain,\n\n /**\n * envs extension.\n */\n private envs: EnvsMain,\n\n /**\n * workspace extension.\n */\n private workspace: Workspace,\n\n /**\n * tester service.\n */\n readonly service: TesterService,\n\n /**\n * build task.\n */\n readonly task: TesterTask,\n\n private devFiles: DevFilesMain,\n\n private builder: BuilderMain\n ) {}\n\n _testsResults: { [componentId: string]: ComponentsResults } | undefined[] = [];\n\n async test(components: Component[], opts?: TesterOptions): Promise<TestResults> {\n const options = this.getOptions(opts);\n const envsRuntime = await this.envs.createEnvironment(components);\n if (opts?.env) {\n return envsRuntime.runEnv(opts.env, this.service, options);\n }\n const results = await envsRuntime.run(this.service, options);\n if (opts?.junit) {\n await this.generateJUnit(opts?.junit, results);\n }\n return results;\n }\n\n private async generateJUnit(filePath: string, testsResults: TestResults) {\n const components = testsResults.results.map((envResult) => envResult.data?.components).flat();\n const jUnit = testsResultsToJUnitFormat(compact(components));\n await fs.outputFile(filePath, jUnit);\n }\n\n /**\n * watch all components for changes and test upon each.\n */\n async watch(components: Component[], opts?: TesterOptions) {\n const options = this.getOptions(opts);\n const envsRuntime = await this.envs.createEnvironment(components);\n if (opts?.env) {\n return envsRuntime.runEnv(opts.env, this.service, options);\n }\n\n this.service.onTestRunComplete((results) => {\n results.components.forEach((component) => {\n this._testsResults[component.componentId.toString()] = component;\n });\n });\n return envsRuntime.run(this.service, options);\n }\n\n async uiWatch() {\n const components = await this.workspace.list();\n return this.watch(components, { watch: true, debug: false, ui: true });\n }\n\n async getTestsResults(\n component: IComponent,\n idHasVersion = true\n ): Promise<{ testsResults?: TestsResult; loading: boolean; coverage?: CoverageResults } | undefined> {\n const entry = component.get(TesterAspect.id);\n const isModified = !idHasVersion && (await component.isModified());\n const data = this.builder.getDataByAspect(component, TesterAspect.id) as {\n tests: TestsResult & {\n coverage: CoverageResults;\n };\n };\n if ((entry || data) && !isModified) {\n return { testsResults: data?.tests || entry?.data.tests, loading: false, coverage: data?.tests.coverage };\n }\n return this.getTestsResultsFromState(component);\n }\n\n private getTestsResultsFromState(component: IComponent) {\n const tests = this._testsResults[component.id.toString()];\n return { testsResults: tests?.results, loading: tests?.loading || false, coverage: tests?.coverage };\n }\n\n /**\n * Get the tests patterns from the config. (used as default patterns in case the env does not provide them via getTestsDevPatterns)\n * @returns\n */\n getPatterns() {\n return this.patterns;\n }\n\n getComponentDevPatterns(component: Component) {\n const env = this.envs.calculateEnv(component, { skipWarnings: !!this.workspace?.inInstallContext }).env;\n const componentPatterns: string[] = env.getTestsDevPatterns\n ? env.getTestsDevPatterns(component)\n : this.getPatterns();\n return { name: 'tests', pattern: componentPatterns };\n }\n\n getDevPatternToRegister() {\n return this.getComponentDevPatterns.bind(this);\n }\n\n /**\n * get all test files of a component.\n */\n getTestFiles(component: Component) {\n return detectTestFiles(component, this.devFiles);\n }\n\n private getOptions(options?: TesterOptions): TesterOptions {\n const defaults = {\n watch: false,\n debug: false,\n };\n\n return merge(defaults, options);\n }\n\n static defaultConfig = {\n /**\n * default test regex for which files tester to apply on.\n */\n patterns: ['**/*.spec.+(js|ts|jsx|tsx)', '**/*.test.+(js|ts|jsx|tsx)'],\n\n /**\n * determine whether to watch on start.\n */\n watchOnStart: false,\n };\n\n static async provider(\n [cli, envs, workspace, loggerAspect, graphql, ui, devFiles, builder]: [\n CLIMain,\n EnvsMain,\n Workspace,\n LoggerMain,\n GraphqlMain,\n UiMain,\n DevFilesMain,\n BuilderMain,\n ],\n config: TesterExtensionConfig\n ) {\n const logger = loggerAspect.createLogger(TesterAspect.id);\n const testerService = new TesterService(workspace, logger, graphql.pubsub, devFiles);\n envs.registerService(testerService);\n const tester = new TesterMain(\n config.patterns,\n graphql,\n envs,\n workspace,\n testerService,\n new TesterTask(TesterAspect.id, devFiles),\n devFiles,\n builder\n );\n devFiles.registerDevPattern(tester.getDevPatternToRegister());\n\n if (workspace) {\n ui.registerOnStart(async () => {\n if (!config.watchOnStart) return undefined;\n await tester.uiWatch();\n return undefined;\n });\n }\n cli.register(new TestCmd(tester, workspace, logger));\n\n graphql.register(() => testerSchema(tester, graphql));\n\n return tester;\n }\n}\n\nTesterAspect.addRuntime(TesterMain);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_fsExtra","data","_interopRequireDefault","require","_cli","_lodash","_envs","_logger","_workspace","_graphql","_builder","_ui","_lodash2","_devFiles","_test","_tester","_tester2","_tester3","_utils","_tester4","_junitGenerator","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","TesterMain","constructor","patterns","graphql","envs","workspace","service","task","devFiles","builder","test","components","opts","options","getOptions","envsRuntime","createEnvironment","env","runEnv","results","run","junit","generateJUnit","filePath","testsResults","map","envResult","flat","jUnit","testsResultsToJUnitFormat","compact","fs","outputFile","watch","onTestRunComplete","forEach","component","_testsResults","componentId","toString","uiWatch","list","debug","ui","getTestsResults","idHasVersion","entry","get","TesterAspect","id","isModified","getDataByAspect","tests","loading","coverage","getTestsResultsFromState","getPatterns","getComponentDevPatterns","calculateEnv","skipWarnings","inInstallContext","componentPatterns","getTestsDevPatterns","name","pattern","getDevPatternToRegister","bind","getTestFiles","detectTestFiles","defaults","merge","provider","cli","loggerAspect","config","logger","createLogger","testerService","TesterService","pubsub","registerService","tester","TesterTask","registerDevPattern","registerOnStart","watchOnStart","undefined","register","TestCmd","testerSchema","exports","MainRuntime","CLIAspect","EnvsAspect","WorkspaceAspect","LoggerAspect","GraphqlAspect","UIAspect","DevFilesAspect","BuilderAspect","addRuntime"],"sources":["tester.main.runtime.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport type { CLIMain } from '@teambit/cli';\nimport { CLIAspect, MainRuntime } from '@teambit/cli';\nimport type { Component, IComponent } from '@teambit/component';\nimport compact from 'lodash.compact';\nimport type { EnvsExecutionResult, EnvsMain } from '@teambit/envs';\nimport { EnvsAspect } from '@teambit/envs';\nimport type { LoggerMain } from '@teambit/logger';\nimport { LoggerAspect } from '@teambit/logger';\nimport type { Workspace } from '@teambit/workspace';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport type { GraphqlMain } from '@teambit/graphql';\nimport { GraphqlAspect } from '@teambit/graphql';\nimport type { BuilderMain } from '@teambit/builder';\nimport { BuilderAspect } from '@teambit/builder';\nimport type { UiMain } from '@teambit/ui';\nimport { UIAspect } from '@teambit/ui';\nimport { merge } from 'lodash';\nimport type { DevFilesMain } from '@teambit/dev-files';\nimport { DevFilesAspect } from '@teambit/dev-files';\nimport type { TestsResult } from '@teambit/tests-results';\nimport type { ComponentsResults, CallbackFn, Tests } from './tester';\nimport { TestCmd } from './test.cmd';\nimport { TesterAspect } from './tester.aspect';\nimport { TesterService } from './tester.service';\nimport { TesterTask } from './tester.task';\nimport { detectTestFiles } from './utils';\nimport { testerSchema } from './tester.graphql';\nimport { testsResultsToJUnitFormat } from './utils/junit-generator';\n\nexport type TesterExtensionConfig = {\n /**\n * regex of the text environment.\n */\n testRegex: string;\n\n /**\n * determine whether to watch on start.\n */\n watchOnStart: boolean;\n patterns: string[];\n};\n\nexport type TestResults = EnvsExecutionResult<Tests>;\n\nexport type TesterOptions = {\n /**\n * start the tester in watch mode.\n */\n watch: boolean;\n\n /**\n * start the tester in debug mode.\n */\n debug: boolean;\n\n /**\n * start the tester in debug mode.\n */\n ui?: boolean;\n\n /**\n * initiate the tester on given env.\n */\n env?: string;\n\n /**\n * generate JUnit files on the specified dir\n */\n junit?: string;\n\n /**\n * show code coverage\n */\n coverage?: boolean;\n\n /**\n * update snapshot if supported by the tester\n */\n updateSnapshot?: boolean;\n\n /**\n * absolute paths of specific test files to run. when provided, only these files are tested.\n */\n testFiles?: string[];\n\n callback?: CallbackFn;\n};\n\ntype CoverageResults = {\n files: CoverageFile[];\n total: CoverageData;\n};\n\ntype CoverageStats = {\n pct: number;\n total: number;\n covered: number;\n skipped: number;\n};\n\ntype CoverageFile = {\n path: string;\n data: CoverageData;\n};\n\ntype CoverageData = {\n lines: CoverageStats;\n statements: CoverageStats;\n functions: CoverageStats;\n branches: CoverageStats;\n};\n\nexport class TesterMain {\n static runtime = MainRuntime;\n static dependencies = [\n CLIAspect,\n EnvsAspect,\n WorkspaceAspect,\n LoggerAspect,\n GraphqlAspect,\n UIAspect,\n DevFilesAspect,\n BuilderAspect,\n ];\n\n constructor(\n private patterns: string[],\n /**\n * graphql extension.\n */\n private graphql: GraphqlMain,\n\n /**\n * envs extension.\n */\n private envs: EnvsMain,\n\n /**\n * workspace extension.\n */\n private workspace: Workspace,\n\n /**\n * tester service.\n */\n readonly service: TesterService,\n\n /**\n * build task.\n */\n readonly task: TesterTask,\n\n private devFiles: DevFilesMain,\n\n private builder: BuilderMain\n ) {}\n\n _testsResults: { [componentId: string]: ComponentsResults } | undefined[] = [];\n\n async test(components: Component[], opts?: TesterOptions): Promise<TestResults> {\n const options = this.getOptions(opts);\n const envsRuntime = await this.envs.createEnvironment(components);\n if (opts?.env) {\n return envsRuntime.runEnv(opts.env, this.service, options);\n }\n const results = await envsRuntime.run(this.service, options);\n if (opts?.junit) {\n await this.generateJUnit(opts?.junit, results);\n }\n return results;\n }\n\n private async generateJUnit(filePath: string, testsResults: TestResults) {\n const components = testsResults.results.map((envResult) => envResult.data?.components).flat();\n const jUnit = testsResultsToJUnitFormat(compact(components));\n await fs.outputFile(filePath, jUnit);\n }\n\n /**\n * watch all components for changes and test upon each.\n */\n async watch(components: Component[], opts?: TesterOptions) {\n const options = this.getOptions(opts);\n const envsRuntime = await this.envs.createEnvironment(components);\n if (opts?.env) {\n return envsRuntime.runEnv(opts.env, this.service, options);\n }\n\n this.service.onTestRunComplete((results) => {\n results.components.forEach((component) => {\n this._testsResults[component.componentId.toString()] = component;\n });\n });\n return envsRuntime.run(this.service, options);\n }\n\n async uiWatch() {\n const components = await this.workspace.list();\n return this.watch(components, { watch: true, debug: false, ui: true });\n }\n\n async getTestsResults(\n component: IComponent,\n idHasVersion = true\n ): Promise<{ testsResults?: TestsResult; loading: boolean; coverage?: CoverageResults } | undefined> {\n const entry = component.get(TesterAspect.id);\n const isModified = !idHasVersion && (await component.isModified());\n const data = this.builder.getDataByAspect(component, TesterAspect.id) as {\n tests: TestsResult & {\n coverage: CoverageResults;\n };\n };\n if ((entry || data) && !isModified) {\n return { testsResults: data?.tests || entry?.data.tests, loading: false, coverage: data?.tests.coverage };\n }\n return this.getTestsResultsFromState(component);\n }\n\n private getTestsResultsFromState(component: IComponent) {\n const tests = this._testsResults[component.id.toString()];\n return { testsResults: tests?.results, loading: tests?.loading || false, coverage: tests?.coverage };\n }\n\n /**\n * Get the tests patterns from the config. (used as default patterns in case the env does not provide them via getTestsDevPatterns)\n * @returns\n */\n getPatterns() {\n return this.patterns;\n }\n\n getComponentDevPatterns(component: Component) {\n const env = this.envs.calculateEnv(component, { skipWarnings: !!this.workspace?.inInstallContext }).env;\n const componentPatterns: string[] = env.getTestsDevPatterns\n ? env.getTestsDevPatterns(component)\n : this.getPatterns();\n return { name: 'tests', pattern: componentPatterns };\n }\n\n getDevPatternToRegister() {\n return this.getComponentDevPatterns.bind(this);\n }\n\n /**\n * get all test files of a component.\n */\n getTestFiles(component: Component) {\n return detectTestFiles(component, this.devFiles);\n }\n\n private getOptions(options?: TesterOptions): TesterOptions {\n const defaults = {\n watch: false,\n debug: false,\n };\n\n return merge(defaults, options);\n }\n\n static defaultConfig = {\n /**\n * default test regex for which files tester to apply on.\n */\n patterns: ['**/*.spec.+(js|ts|jsx|tsx)', '**/*.test.+(js|ts|jsx|tsx)'],\n\n /**\n * determine whether to watch on start.\n */\n watchOnStart: false,\n };\n\n static async provider(\n [cli, envs, workspace, loggerAspect, graphql, ui, devFiles, builder]: [\n CLIMain,\n EnvsMain,\n Workspace,\n LoggerMain,\n GraphqlMain,\n UiMain,\n DevFilesMain,\n BuilderMain,\n ],\n config: TesterExtensionConfig\n ) {\n const logger = loggerAspect.createLogger(TesterAspect.id);\n const testerService = new TesterService(workspace, logger, graphql.pubsub, devFiles);\n envs.registerService(testerService);\n const tester = new TesterMain(\n config.patterns,\n graphql,\n envs,\n workspace,\n testerService,\n new TesterTask(TesterAspect.id, devFiles),\n devFiles,\n builder\n );\n devFiles.registerDevPattern(tester.getDevPatternToRegister());\n\n if (workspace) {\n ui.registerOnStart(async () => {\n if (!config.watchOnStart) return undefined;\n await tester.uiWatch();\n return undefined;\n });\n }\n cli.register(new TestCmd(tester, workspace, logger));\n\n graphql.register(() => testerSchema(tester, graphql));\n\n return tester;\n }\n}\n\nTesterAspect.addRuntime(TesterMain);\n"],"mappings":"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","ignoreList":[]}
@@ -18,6 +18,13 @@ function _component() {
18
18
  };
19
19
  return data;
20
20
  }
21
+ function _toolboxPath() {
22
+ const data = require("@teambit/toolbox.path.path");
23
+ _toolboxPath = function () {
24
+ return data;
25
+ };
26
+ return data;
27
+ }
21
28
  function _cliHighlight() {
22
29
  const data = _interopRequireDefault(require("cli-highlight"));
23
30
  _cliHighlight = function () {
@@ -97,8 +104,12 @@ class TesterService {
97
104
  return new (_tester().Tests)([]);
98
105
  }
99
106
  const tester = context.env.getTester();
107
+ // when specific test files were requested (e.g. `bit test path/to/comp.spec.ts`), run only them.
108
+ const requestedTestFiles = options.testFiles?.map(filePath => (0, _toolboxPath().pathNormalizeToLinux)(filePath));
100
109
  const allSpecFiles = _component().ComponentMap.as(context.components, component => {
101
- return (0, _utils().detectTestFiles)(component, this.devFiles);
110
+ const files = (0, _utils().detectTestFiles)(component, this.devFiles);
111
+ if (!requestedTestFiles?.length) return files;
112
+ return files.filter(file => requestedTestFiles.includes((0, _toolboxPath().pathNormalizeToLinux)(file.path)));
102
113
  });
103
114
  // drop components with zero spec files before handing them to the tester — otherwise testers
104
115
  // like Mocha invoke their reporter once per component and print "0 passing (0ms)" noise.
@@ -113,13 +124,25 @@ class TesterService {
113
124
  const componentDir = this.workspace.componentDir(component.id);
114
125
  const componentPatterns = this.devFiles.getDevPatterns(component, _tester2().TesterAspect.id);
115
126
  const packageRootDir = await this.workspace.getComponentPackagePath(component);
127
+ const getPaths = () => {
128
+ if (requestedTestFiles?.length) {
129
+ // pass the exact requested spec files to the tester instead of the dev patterns, so testers
130
+ // such as Jest (which relies on the patterns rather than on specFiles) run only these files.
131
+ const matchedSpecFiles = specFiles.getValueByComponentId(component.id) || [];
132
+ return matchedSpecFiles.map(file => ({
133
+ path: file.path,
134
+ relative: file.relative
135
+ }));
136
+ }
137
+ return componentPatterns.map(pattern => ({
138
+ path: (0, _path().resolve)(componentDir, pattern),
139
+ relative: pattern
140
+ }));
141
+ };
116
142
  return {
117
143
  componentDir,
118
144
  packageRootDir,
119
- paths: componentPatterns.map(pattern => ({
120
- path: (0, _path().resolve)(componentDir, pattern),
121
- relative: pattern
122
- })) || []
145
+ paths: getPaths()
123
146
  };
124
147
  });
125
148
  let additionalHostDependencies = [];
@@ -1 +1 @@
1
- {"version":3,"names":["_path","data","require","_component","_cliHighlight","_interopRequireDefault","_tester","_tester2","_utils","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","chalk","OnTestsChanged","exports","TesterService","constructor","workspace","logger","pubsub","devFiles","render","env","descriptor","getDescriptor","name","green","id","displayName","version","configLabel","configObj","config","highlight","language","ignoreIllegals","environment","getTester","undefined","tester","icon","displayConfig","transform","context","onTestRunComplete","callback","_callback","run","options","Tests","allSpecFiles","ComponentMap","as","components","component","detectTestFiles","specFiles","filter","files","length","componentWithTests","toArray","ui","console","cyan","patterns","asAsync","componentDir","componentPatterns","getDevPatterns","TesterAspect","packageRootDir","getComponentPackagePath","paths","map","pattern","path","resolve","relative","additionalHostDependencies","getAdditionalTestHostDependencies","testerContext","assign","release","sourcePatterns","rootPath","debug","watch","coverage","updateSnapshot","results","forEach","publish","testsChanged","componentId","toString","testsResults","loading","test"],"sources":["tester.service.ts"],"sourcesContent":["import type { Logger } from '@teambit/logger';\nimport { resolve } from 'path';\nimport type {\n EnvService,\n ExecutionContext,\n EnvDefinition,\n Env,\n EnvContext,\n ServiceTransformationMap,\n} from '@teambit/envs';\nimport { ComponentMap } from '@teambit/component';\nimport type { Workspace } from '@teambit/workspace';\nimport highlight from 'cli-highlight';\nimport type { PubSubEngine } from 'graphql-subscriptions';\nimport type { DevFilesMain } from '@teambit/dev-files';\nimport type { Tester, CallbackFn } from './tester';\nimport { Tests } from './tester';\nimport { TesterAspect } from './tester.aspect';\nimport type { TesterOptions } from './tester.main.runtime';\nimport { detectTestFiles } from './utils';\n\nconst chalk = require('chalk');\n\nexport const OnTestsChanged = 'OnTestsChanged';\n\ntype TesterTransformationMap = ServiceTransformationMap & {\n getTester: () => Tester;\n};\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 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 const name = `${chalk.green('configured tester:')} ${descriptor?.id} (${descriptor?.displayName} @ ${\n descriptor?.version\n })`;\n const configLabel = chalk.green('tester config:');\n const configObj = descriptor?.config\n ? highlight(descriptor?.config, { language: 'javascript', ignoreIllegals: true })\n : '';\n return `${name}\\n${configLabel}\\n${configObj}`;\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 transform(env: Env, context: EnvContext): TesterTransformationMap | undefined {\n // Old env\n if (!env?.tester) return undefined;\n\n return {\n getTester: () => env.tester()(context),\n };\n }\n\n onTestRunComplete(callback: CallbackFn) {\n this._callback = callback;\n }\n\n async run(context: ExecutionContext, options: TesterOptions): Promise<Tests> {\n if (!context.env.getTester) {\n return new Tests([]);\n }\n const tester: Tester = context.env.getTester();\n const allSpecFiles = ComponentMap.as(context.components, (component) => {\n return detectTestFiles(component, this.devFiles);\n });\n // drop components with zero spec files before handing them to the tester — otherwise testers\n // like Mocha invoke their reporter once per component and print \"0 passing (0ms)\" noise.\n const specFiles = allSpecFiles.filter((files) => files.length > 0);\n const componentWithTests = specFiles.toArray().length;\n\n if (componentWithTests === 0 && !options.ui) {\n // silent: the final summary in `bit test` collapses no-test components into a single line.\n return new Tests([]);\n }\n\n if (!options.ui)\n this.logger.console(`testing ${componentWithTests} components with environment ${chalk.cyan(context.id)}\\n`);\n\n const patterns = await ComponentMap.asAsync(context.components, async (component) => {\n const componentDir = this.workspace.componentDir(component.id);\n const componentPatterns = this.devFiles.getDevPatterns(component, TesterAspect.id);\n const packageRootDir = await this.workspace.getComponentPackagePath(component);\n\n return {\n componentDir,\n packageRootDir,\n paths:\n componentPatterns.map((pattern: string) => ({\n path: resolve(componentDir, pattern),\n relative: pattern,\n })) || [],\n };\n });\n\n let additionalHostDependencies = [];\n if (\n context.env.getAdditionalTestHostDependencies &&\n typeof context.env.getAdditionalTestHostDependencies === 'function'\n ) {\n additionalHostDependencies = await context.env.getAdditionalTestHostDependencies();\n }\n\n const testerContext = Object.assign(context, {\n release: false,\n specFiles,\n patterns,\n sourcePatterns: 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 updateSnapshot: options.updateSnapshot,\n additionalHostDependencies,\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"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_path","data","require","_component","_toolboxPath","_cliHighlight","_interopRequireDefault","_tester","_tester2","_utils","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","chalk","OnTestsChanged","exports","TesterService","constructor","workspace","logger","pubsub","devFiles","render","env","descriptor","getDescriptor","name","green","id","displayName","version","configLabel","configObj","config","highlight","language","ignoreIllegals","environment","getTester","undefined","tester","icon","displayConfig","transform","context","onTestRunComplete","callback","_callback","run","options","Tests","requestedTestFiles","testFiles","map","filePath","pathNormalizeToLinux","allSpecFiles","ComponentMap","as","components","component","files","detectTestFiles","length","filter","file","includes","path","specFiles","componentWithTests","toArray","ui","console","cyan","patterns","asAsync","componentDir","componentPatterns","getDevPatterns","TesterAspect","packageRootDir","getComponentPackagePath","getPaths","matchedSpecFiles","getValueByComponentId","relative","pattern","resolve","paths","additionalHostDependencies","getAdditionalTestHostDependencies","testerContext","assign","release","sourcePatterns","rootPath","debug","watch","coverage","updateSnapshot","results","forEach","publish","testsChanged","componentId","toString","testsResults","loading","test"],"sources":["tester.service.ts"],"sourcesContent":["import type { Logger } from '@teambit/logger';\nimport { resolve } from 'path';\nimport type {\n EnvService,\n ExecutionContext,\n EnvDefinition,\n Env,\n EnvContext,\n ServiceTransformationMap,\n} from '@teambit/envs';\nimport { ComponentMap } from '@teambit/component';\nimport { pathNormalizeToLinux } from '@teambit/toolbox.path.path';\nimport type { Workspace } from '@teambit/workspace';\nimport highlight from 'cli-highlight';\nimport type { PubSubEngine } from 'graphql-subscriptions';\nimport type { DevFilesMain } from '@teambit/dev-files';\nimport type { Tester, CallbackFn } from './tester';\nimport { Tests } from './tester';\nimport { TesterAspect } from './tester.aspect';\nimport type { TesterOptions } from './tester.main.runtime';\nimport { detectTestFiles } from './utils';\n\nconst chalk = require('chalk');\n\nexport const OnTestsChanged = 'OnTestsChanged';\n\ntype TesterTransformationMap = ServiceTransformationMap & {\n getTester: () => Tester;\n};\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 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 const name = `${chalk.green('configured tester:')} ${descriptor?.id} (${descriptor?.displayName} @ ${\n descriptor?.version\n })`;\n const configLabel = chalk.green('tester config:');\n const configObj = descriptor?.config\n ? highlight(descriptor?.config, { language: 'javascript', ignoreIllegals: true })\n : '';\n return `${name}\\n${configLabel}\\n${configObj}`;\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 transform(env: Env, context: EnvContext): TesterTransformationMap | undefined {\n // Old env\n if (!env?.tester) return undefined;\n\n return {\n getTester: () => env.tester()(context),\n };\n }\n\n onTestRunComplete(callback: CallbackFn) {\n this._callback = callback;\n }\n\n async run(context: ExecutionContext, options: TesterOptions): Promise<Tests> {\n if (!context.env.getTester) {\n return new Tests([]);\n }\n const tester: Tester = context.env.getTester();\n // when specific test files were requested (e.g. `bit test path/to/comp.spec.ts`), run only them.\n const requestedTestFiles = options.testFiles?.map((filePath) => pathNormalizeToLinux(filePath));\n const allSpecFiles = ComponentMap.as(context.components, (component) => {\n const files = detectTestFiles(component, this.devFiles);\n if (!requestedTestFiles?.length) return files;\n return files.filter((file) => requestedTestFiles.includes(pathNormalizeToLinux(file.path)));\n });\n // drop components with zero spec files before handing them to the tester — otherwise testers\n // like Mocha invoke their reporter once per component and print \"0 passing (0ms)\" noise.\n const specFiles = allSpecFiles.filter((files) => files.length > 0);\n const componentWithTests = specFiles.toArray().length;\n\n if (componentWithTests === 0 && !options.ui) {\n // silent: the final summary in `bit test` collapses no-test components into a single line.\n return new Tests([]);\n }\n\n if (!options.ui)\n this.logger.console(`testing ${componentWithTests} components with environment ${chalk.cyan(context.id)}\\n`);\n\n const patterns = await ComponentMap.asAsync(context.components, async (component) => {\n const componentDir = this.workspace.componentDir(component.id);\n const componentPatterns = this.devFiles.getDevPatterns(component, TesterAspect.id);\n const packageRootDir = await this.workspace.getComponentPackagePath(component);\n\n const getPaths = () => {\n if (requestedTestFiles?.length) {\n // pass the exact requested spec files to the tester instead of the dev patterns, so testers\n // such as Jest (which relies on the patterns rather than on specFiles) run only these files.\n const matchedSpecFiles = specFiles.getValueByComponentId(component.id) || [];\n return matchedSpecFiles.map((file) => ({ path: file.path, relative: file.relative }));\n }\n return componentPatterns.map((pattern: string) => ({\n path: resolve(componentDir, pattern),\n relative: pattern,\n }));\n };\n\n return {\n componentDir,\n packageRootDir,\n paths: getPaths(),\n };\n });\n\n let additionalHostDependencies = [];\n if (\n context.env.getAdditionalTestHostDependencies &&\n typeof context.env.getAdditionalTestHostDependencies === 'function'\n ) {\n additionalHostDependencies = await context.env.getAdditionalTestHostDependencies();\n }\n\n const testerContext = Object.assign(context, {\n release: false,\n specFiles,\n patterns,\n sourcePatterns: 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 updateSnapshot: options.updateSnapshot,\n additionalHostDependencies,\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"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,24 +1,26 @@
1
1
  {
2
2
  "name": "@teambit/tester",
3
- "version": "1.0.1005",
3
+ "version": "1.0.1007",
4
4
  "homepage": "https://bit.cloud/teambit/defender/tester",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.defender",
8
8
  "name": "tester",
9
- "version": "1.0.1005"
9
+ "version": "1.0.1007"
10
10
  },
11
11
  "dependencies": {
12
12
  "lodash": "4.17.21",
13
13
  "chalk": "4.1.2",
14
+ "fs-extra": "10.0.0",
14
15
  "graphql-subscriptions": "1.2.0",
15
16
  "graphql-tag": "2.12.1",
16
- "fs-extra": "10.0.0",
17
17
  "lodash.compact": "3.0.1",
18
18
  "cli-highlight": "2.1.9",
19
19
  "junit-report-builder": "3.0.1",
20
20
  "strip-ansi": "6.0.0",
21
+ "@teambit/bit-error": "0.0.404",
21
22
  "@teambit/legacy.constants": "0.0.29",
23
+ "@teambit/toolbox.path.path": "0.0.17",
22
24
  "@teambit/toolbox.time.timer": "0.0.14",
23
25
  "@teambit/harmony": "0.4.7",
24
26
  "@teambit/component-id": "1.2.4",
@@ -29,20 +31,19 @@
29
31
  "@teambit/design.ui.tooltip": "0.0.383",
30
32
  "@teambit/evangelist.elements.icon": "1.0.5",
31
33
  "@teambit/defender.ui.test-page": "0.0.84",
32
- "@teambit/bit-error": "0.0.404",
33
- "@teambit/cli": "0.0.1332",
34
- "@teambit/component": "1.0.1005",
35
- "@teambit/logger": "0.0.1425",
36
- "@teambit/workspace": "1.0.1005",
37
- "@teambit/envs": "1.0.1005",
38
- "@teambit/graphql": "1.0.1005",
39
- "@teambit/builder": "1.0.1005",
40
- "@teambit/dev-files": "1.0.1005",
41
- "@teambit/ui": "1.0.1005",
42
- "@teambit/compiler": "1.0.1005",
43
- "@teambit/component.sources": "0.0.174",
44
- "@teambit/component-compare": "1.0.1005",
45
- "@teambit/docs": "1.0.1005"
34
+ "@teambit/cli": "0.0.1333",
35
+ "@teambit/component": "1.0.1007",
36
+ "@teambit/logger": "0.0.1426",
37
+ "@teambit/workspace": "1.0.1007",
38
+ "@teambit/envs": "1.0.1007",
39
+ "@teambit/graphql": "1.0.1007",
40
+ "@teambit/builder": "1.0.1007",
41
+ "@teambit/dev-files": "1.0.1007",
42
+ "@teambit/ui": "1.0.1007",
43
+ "@teambit/compiler": "1.0.1007",
44
+ "@teambit/component.sources": "0.0.175",
45
+ "@teambit/component-compare": "1.0.1007",
46
+ "@teambit/docs": "1.0.1007"
46
47
  },
47
48
  "devDependencies": {
48
49
  "@types/lodash": "4.14.165",