@zohodesk/testinglibrary 0.0.5-exp.9 → 0.0.6
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/.babelrc +3 -0
- package/.eslintrc.js +27 -0
- package/.prettierrc +6 -0
- package/{changelog.md → Changelog.md} +8 -11
- package/build/bdd-framework/cli/commands/env.js +9 -10
- package/build/bdd-framework/cli/commands/export.js +5 -4
- package/build/bdd-framework/cli/commands/test.js +9 -10
- package/build/bdd-framework/cli/options.js +0 -1
- package/build/bdd-framework/config/index.js +0 -1
- package/build/bdd-framework/cucumber/buildStepDefinition.js +0 -2
- package/build/bdd-framework/cucumber/gherkin.d.js +5 -0
- package/build/bdd-framework/cucumber/loadSources.js +0 -1
- package/build/bdd-framework/cucumber/loadSteps.js +2 -8
- package/build/bdd-framework/decorators.js +7 -6
- package/build/bdd-framework/gen/formatter.js +7 -11
- package/build/bdd-framework/gen/i18n.js +2 -11
- package/build/bdd-framework/gen/index.js +22 -12
- package/build/bdd-framework/gen/poms.js +0 -1
- package/build/bdd-framework/gen/testFile.js +55 -55
- package/build/bdd-framework/gen/testNode.js +7 -9
- package/build/bdd-framework/gen/testPoms.js +123 -0
- package/build/bdd-framework/index.js +12 -0
- package/build/bdd-framework/playwright/fixtureParameterNames.js +8 -34
- package/build/bdd-framework/playwright/getLocationInFile.js +5 -9
- package/build/bdd-framework/playwright/testTypeImpl.js +1 -7
- package/build/bdd-framework/playwright/transform.js +2 -7
- package/build/bdd-framework/playwright/types.js +5 -0
- package/build/bdd-framework/playwright/utils.js +15 -5
- package/build/bdd-framework/run/bddFixtures.js +3 -4
- package/build/bdd-framework/run/bddWorld.js +3 -7
- package/build/bdd-framework/snippets/index.js +6 -7
- package/build/bdd-framework/snippets/snippetSyntax.js +1 -10
- package/build/bdd-framework/snippets/snippetSyntaxDecorators.js +0 -6
- package/build/bdd-framework/stepDefinitions/createBdd.js +1 -4
- package/build/bdd-framework/stepDefinitions/createDecorators.js +1 -2
- package/build/bdd-framework/stepDefinitions/decorators/poms.js +50 -0
- package/build/bdd-framework/stepDefinitions/decorators/steps.js +94 -0
- package/build/bdd-framework/stepDefinitions/defineStep.js +10 -11
- package/build/bdd-framework/stepDefinitions/stepConfig.js +24 -0
- package/build/bdd-framework/utils/index.js +1 -3
- package/build/bdd-framework/utils/logger.js +17 -9
- package/build/core/jest/runner/jest-runner.js +1 -0
- package/build/core/playwright/codegen.js +1 -2
- package/build/core/playwright/custom-commands.js +1 -1
- package/build/core/playwright/index.js +15 -6
- package/build/core/playwright/readConfigFile.js +5 -0
- package/build/core/playwright/report-generator.js +1 -3
- package/build/core/playwright/setup/config-creator.js +23 -12
- package/build/core/playwright/test-runner.js +35 -2
- package/build/decorators.d.ts +1 -0
- package/build/decorators.js +16 -0
- package/build/index.d.ts +5 -0
- package/build/index.js +23 -1
- package/build/lib/cli.js +14 -5
- package/build/lint/index.js +3 -6
- package/build/parser/parser.js +206 -0
- package/build/parser/sample.feature +34 -0
- package/build/parser/sample.spec.js +37 -0
- package/build/parser/verifier.js +130 -0
- package/build/setup-folder-structure/samples/auth-setup-sample.js +72 -0
- package/build/setup-folder-structure/samples/authUsers-sample.json +9 -0
- package/build/setup-folder-structure/samples/env-config-sample.json +21 -0
- package/build/setup-folder-structure/samples/git-ignore.sample.js +33 -0
- package/build/setup-folder-structure/samples/uat-config-sample.js +35 -0
- package/build/setup-folder-structure/setupProject.js +6 -10
- package/build/utils/cliArgsToObject.js +1 -0
- package/build/utils/fileUtils.js +53 -0
- package/build/utils/logger.js +6 -4
- package/build/utils/stepDefinitionsFormatter.js +12 -0
- package/npm-shrinkwrap.json +1074 -6
- package/package.json +12 -6
- package/playwright.config.js +5 -5
- package/build/setup-folder-structure/env-config-sample.json +0 -17
- package/build/setup-folder-structure/uat-config-sample.js +0 -31
- package/build/setup-folder-structure/user-example.json +0 -3
package/.babelrc
CHANGED
package/.eslintrc.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
"env": {
|
|
3
|
+
"node": true,
|
|
4
|
+
"es2021": true
|
|
5
|
+
},
|
|
6
|
+
"extends": "eslint:recommended",
|
|
7
|
+
"overrides": [
|
|
8
|
+
{
|
|
9
|
+
"env": {
|
|
10
|
+
"node": true
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
".eslintrc.{js,cjs}"
|
|
14
|
+
],
|
|
15
|
+
"parserOptions": {
|
|
16
|
+
"sourceType": "script"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"parserOptions": {
|
|
21
|
+
"ecmaVersion": "latest",
|
|
22
|
+
"sourceType": "module"
|
|
23
|
+
},
|
|
24
|
+
"rules": {
|
|
25
|
+
"indent": ["error", 2]
|
|
26
|
+
}
|
|
27
|
+
}
|
package/.prettierrc
ADDED
|
@@ -2,21 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
## Framework that abstracts the configuration for playwright and Jest
|
|
4
4
|
|
|
5
|
-
# 0.0.
|
|
5
|
+
# 0.0.6
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Provided Initial Support for cucumber feature files
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
- Playwright-bdd and cucumber added as dependencies
|
|
10
|
+
- Added config bddMode which toggles the feature files processing
|
|
11
|
+
- Added expect timeout and test timeout as an option
|
|
12
|
+
- Decorators support for given, when and then. Typescript support needed to use this feature
|
|
10
13
|
|
|
11
|
-
|
|
14
|
+
## Internal Library change
|
|
12
15
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- Provided Initial Support for cucumber feature files
|
|
16
|
-
- Playwright-bdd and cucumber
|
|
17
|
-
- Added config bddMode which toggles the feature files processing
|
|
18
|
-
- Internal Library change
|
|
19
|
-
- Provided support for import/export statements
|
|
16
|
+
- Provided support for import/export statements
|
|
20
17
|
|
|
21
18
|
# 0.0.5
|
|
22
19
|
|
|
@@ -6,17 +6,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.envCommand = void 0;
|
|
8
8
|
exports.getOwnVersion = getOwnVersion;
|
|
9
|
-
var _fs = _interopRequireDefault(require("fs"));
|
|
10
9
|
var _commander = require("commander");
|
|
11
10
|
var _options = require("../options");
|
|
12
11
|
var _path = _interopRequireDefault(require("path"));
|
|
13
12
|
var _logger = require("../../utils/logger");
|
|
14
13
|
var _utils = require("../../utils");
|
|
15
14
|
var _loadConfig = require("../../playwright/loadConfig");
|
|
15
|
+
const logger = new _logger.Logger({
|
|
16
|
+
verbose: true
|
|
17
|
+
});
|
|
16
18
|
const envCommand = new _commander.Command('env').description('Prints environment info').addOption(_options.configOption).action(opts => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
logger.log(`Playwright-bdd environment info:\n`);
|
|
20
|
+
logger.log(`platform: ${process.platform}`);
|
|
21
|
+
logger.log(`node: ${process.version}`);
|
|
20
22
|
showPackageVersion('playwright-bdd');
|
|
21
23
|
showPackageVersion('@playwright/test');
|
|
22
24
|
showPackageVersion('@cucumber/cucumber');
|
|
@@ -25,20 +27,17 @@ const envCommand = new _commander.Command('env').description('Prints environment
|
|
|
25
27
|
exports.envCommand = envCommand;
|
|
26
28
|
function showPackageVersion(packageName) {
|
|
27
29
|
const version = packageName === 'playwright-bdd' ? getOwnVersion() : (0, _utils.getPackageVersion)(packageName);
|
|
28
|
-
|
|
30
|
+
logger.log(`${packageName}: v${version}`);
|
|
29
31
|
}
|
|
30
|
-
|
|
31
32
|
/**
|
|
32
33
|
* Getting own version by relative path instead of using getPackageVersion(),
|
|
33
34
|
* to aneble using directly from /dist in tests.
|
|
34
35
|
*/
|
|
35
36
|
function getOwnVersion() {
|
|
36
|
-
|
|
37
|
-
// const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
38
|
-
return '5.2.0';
|
|
37
|
+
return '5.3.0';
|
|
39
38
|
}
|
|
40
39
|
function showPlaywrightConfigPath(cliConfigPath) {
|
|
41
40
|
const resolvedConfigFile = (0, _loadConfig.resolveConfigFile)(cliConfigPath);
|
|
42
41
|
const relPath = _path.default.relative(process.cwd(), resolvedConfigFile);
|
|
43
|
-
|
|
42
|
+
logger.log(`Playwright config file: ${relPath}`);
|
|
44
43
|
}
|
|
@@ -13,13 +13,14 @@ var _logger = require("../../utils/logger");
|
|
|
13
13
|
var _env = require("../../config/env");
|
|
14
14
|
var _test = require("./test");
|
|
15
15
|
var _gen = require("../../gen");
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
const logger = new _logger.Logger({
|
|
17
|
+
verbose: true
|
|
18
|
+
});
|
|
18
19
|
const exportCommand = new _commander.Command('export').description('Prints all step definitions').addOption(_options.configOption).action(async opts => {
|
|
19
20
|
const {
|
|
20
21
|
resolvedConfigFile
|
|
21
22
|
} = await (0, _loadConfig.loadConfig)(opts.config);
|
|
22
|
-
|
|
23
|
+
logger.log(`List of all steps found by config: ${_path.default.relative(process.cwd(), resolvedConfigFile)}\n`);
|
|
23
24
|
const configs = Object.values((0, _env.getEnvConfigs)());
|
|
24
25
|
(0, _test.assertConfigsCount)(configs);
|
|
25
26
|
await showStepsForConfigs(configs);
|
|
@@ -34,7 +35,7 @@ async function showStepsForConfigs(configs) {
|
|
|
34
35
|
stepDefinitions.forEach(s => steps.add(`* ${getStepText(s)}`));
|
|
35
36
|
});
|
|
36
37
|
await Promise.all(tasks);
|
|
37
|
-
steps.forEach(stepText =>
|
|
38
|
+
steps.forEach(stepText => logger.log(stepText));
|
|
38
39
|
}
|
|
39
40
|
function getStepText({
|
|
40
41
|
pattern,
|
|
@@ -36,16 +36,6 @@ function assertConfigsCount(configs) {
|
|
|
36
36
|
(0, _utils.exitWithMessage)(`No BDD configs found. Did you use defineBddConfig() in playwright.config.ts?`);
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
async function runInWorker(config) {
|
|
40
|
-
const worker = new _worker_threads.Worker(GEN_WORKER_PATH, {
|
|
41
|
-
workerData: {
|
|
42
|
-
config
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
// todo: check if worker exited with error?
|
|
47
|
-
await (0, _events.once)(worker, 'exit');
|
|
48
|
-
}
|
|
49
39
|
async function generateFilesForConfigs(configs, cliConfig) {
|
|
50
40
|
// run first config in main thread and other in workers (to have fresh require cache)
|
|
51
41
|
// See: https://github.com/vitalets/playwright-bdd/issues/32
|
|
@@ -57,4 +47,13 @@ async function generateFilesForConfigs(configs, cliConfig) {
|
|
|
57
47
|
return index === 0 ? new _gen.TestFilesGenerator(finalConfig).generate() : runInWorker(finalConfig);
|
|
58
48
|
});
|
|
59
49
|
return Promise.all(tasks);
|
|
50
|
+
}
|
|
51
|
+
async function runInWorker(config) {
|
|
52
|
+
const worker = new _worker_threads.Worker(GEN_WORKER_PATH, {
|
|
53
|
+
workerData: {
|
|
54
|
+
config
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
// todo: check if worker exited with error?
|
|
58
|
+
await (0, _events.once)(worker, 'exit');
|
|
60
59
|
}
|
|
@@ -11,7 +11,6 @@ var _commander = require("commander");
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
const configOption = new _commander.Option(`-c, --config <file>`, `Path to Playwright configuration file (default: playwright.config.(js|ts))`);
|
|
14
|
-
|
|
15
14
|
/**
|
|
16
15
|
* Helper used in test run to detect config location.
|
|
17
16
|
*/
|
|
@@ -25,7 +25,6 @@ const defaults = {
|
|
|
25
25
|
exports.defaults = defaults;
|
|
26
26
|
function defineBddConfig(inputConfig) {
|
|
27
27
|
const config = getConfig(inputConfig);
|
|
28
|
-
|
|
29
28
|
// In main process store config in env to be accessible by workers
|
|
30
29
|
if (!process.env.TEST_WORKER_INDEX) {
|
|
31
30
|
(0, _env.saveConfigToEnv)(config);
|
|
@@ -24,13 +24,11 @@ function buildStepDefinition({
|
|
|
24
24
|
}, supportCodeLibrary) {
|
|
25
25
|
// todo: handle error.undefinedParameterTypeName as it's done in cucumber?
|
|
26
26
|
const expression = typeof pattern === 'string' ? new _cucumberExpressions.CucumberExpression(pattern, supportCodeLibrary.parameterTypeRegistry) : new _cucumberExpressions.RegularExpression(pattern, supportCodeLibrary.parameterTypeRegistry);
|
|
27
|
-
|
|
28
27
|
// skip wrapping code as it is not needed for decorator steps
|
|
29
28
|
// const wrappedCode = this.wrapCode({
|
|
30
29
|
// code,
|
|
31
30
|
// wrapperOptions: options.wrapperOptions,
|
|
32
31
|
// })
|
|
33
|
-
|
|
34
32
|
return new _step_definition.default({
|
|
35
33
|
code,
|
|
36
34
|
expression,
|
|
@@ -13,7 +13,6 @@ var _console_logger = require("@cucumber/cucumber/lib/api/console_logger");
|
|
|
13
13
|
* Copied from original load_sources, but returns full Pickles.
|
|
14
14
|
* See: https://github.com/cucumber/cucumber-js/blob/main/src/api/load_sources.ts
|
|
15
15
|
*/
|
|
16
|
-
/// <reference path="./gherkin.d.ts" />
|
|
17
16
|
|
|
18
17
|
/**
|
|
19
18
|
* Load and parse features, produce a filtered and ordered test plan and/or parse errors.
|
|
@@ -15,7 +15,6 @@ async function loadSteps(runConfiguration, environment = {}) {
|
|
|
15
15
|
let lib = cache.get(cacheKey);
|
|
16
16
|
if (!lib) {
|
|
17
17
|
// use Playwright's built-in hook to compile TypeScript steps
|
|
18
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
19
18
|
const uninstall = !hasTsNodeRegister(runConfiguration) ? (0, _transform.installTransform)() : () => {};
|
|
20
19
|
lib = (0, _api.loadSupport)(runConfiguration, environment).finally(() => uninstall());
|
|
21
20
|
cache.set(cacheKey, lib);
|
|
@@ -26,13 +25,8 @@ function findStepDefinition(supportCodeLibrary, stepText, file) {
|
|
|
26
25
|
const matchedSteps = supportCodeLibrary.stepDefinitions.filter(step => {
|
|
27
26
|
return step.matchesStepName(stepText);
|
|
28
27
|
});
|
|
29
|
-
if (matchedSteps.length === 0)
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
;
|
|
33
|
-
if (matchedSteps.length > 1) {
|
|
34
|
-
(0, _utils.exitWithMessage)([`Several step definitions found for text: ${stepText} (${file})`, ...matchedSteps.map(s => `- ${s.pattern}`)].join('\n'));
|
|
35
|
-
}
|
|
28
|
+
if (matchedSteps.length === 0) return;
|
|
29
|
+
if (matchedSteps.length > 1) (0, _utils.exitWithMessage)([`Several step definitions found for text: ${stepText} (${file})`, ...matchedSteps.map(s => `- ${s.pattern}`)].join('\n'));
|
|
36
30
|
// todo: check stepDefinition.keyword with PickleStepType
|
|
37
31
|
return matchedSteps[0];
|
|
38
32
|
}
|
|
@@ -6,16 +6,17 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
Object.defineProperty(exports, "Fixture", {
|
|
7
7
|
enumerable: true,
|
|
8
8
|
get: function () {
|
|
9
|
-
return
|
|
9
|
+
return _poms.Fixture;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
12
|
exports.When = exports.Then = exports.Step = exports.Given = void 0;
|
|
13
|
-
var
|
|
14
|
-
|
|
13
|
+
var _poms = require("./stepDefinitions/decorators/poms");
|
|
14
|
+
var _steps = require("./stepDefinitions/decorators/steps");
|
|
15
|
+
const Given = (0, _steps.createStepDecorator)('Given');
|
|
15
16
|
exports.Given = Given;
|
|
16
|
-
const When = (0,
|
|
17
|
+
const When = (0, _steps.createStepDecorator)('When');
|
|
17
18
|
exports.When = When;
|
|
18
|
-
const Then = (0,
|
|
19
|
+
const Then = (0, _steps.createStepDecorator)('Then');
|
|
19
20
|
exports.Then = Then;
|
|
20
|
-
const Step = (0,
|
|
21
|
+
const Step = (0, _steps.createStepDecorator)('Unknown');
|
|
21
22
|
exports.Step = Step;
|
|
@@ -11,6 +11,7 @@ var _jsStringWrap = require("../utils/jsStringWrap");
|
|
|
11
11
|
|
|
12
12
|
const TAGS_FIXTURE_TEST_KEY_SEPARATOR = '|';
|
|
13
13
|
class Formatter {
|
|
14
|
+
config;
|
|
14
15
|
constructor(config) {
|
|
15
16
|
this.config = config;
|
|
16
17
|
}
|
|
@@ -19,7 +20,6 @@ class Formatter {
|
|
|
19
20
|
let varName = (importTestFrom === null || importTestFrom === void 0 ? void 0 : importTestFrom.varName) || 'test';
|
|
20
21
|
if (varName !== 'test') varName = `${varName} as test`;
|
|
21
22
|
return [`/** Generated from: ${uri} */`,
|
|
22
|
-
// prettier-ignore
|
|
23
23
|
// this.quoted() is not possible for 'import from' as backticks not parsed
|
|
24
24
|
`import { ${varName} } from ${JSON.stringify(file)};`, ''];
|
|
25
25
|
}
|
|
@@ -37,7 +37,6 @@ class Formatter {
|
|
|
37
37
|
// prettier-ignore
|
|
38
38
|
return [`test${this.getSubFn(node)}(${this.quoted(node.title)}, async ({ ${fixturesStr} }) => {`, ...children.map(indent), `});`, ''];
|
|
39
39
|
}
|
|
40
|
-
|
|
41
40
|
// eslint-disable-next-line max-params
|
|
42
41
|
step(keyword, text, argument, fixtureNames = []) {
|
|
43
42
|
const fixtures = fixtureNames.length ? `{ ${fixtureNames.join(', ')} }` : '';
|
|
@@ -50,9 +49,7 @@ class Formatter {
|
|
|
50
49
|
return `// missing step: ${keyword}(${this.quoted(text)});`;
|
|
51
50
|
}
|
|
52
51
|
useFixtures(fixtures) {
|
|
53
|
-
return fixtures.length > 0 ? ['// == technical section ==',
|
|
54
|
-
// prettier-ignore
|
|
55
|
-
'', 'test.use({', ...fixtures.map(indent), '});'] : [];
|
|
52
|
+
return fixtures.length > 0 ? ['// == technical section ==', '', 'test.use({', ...fixtures.map(indent), '});'] : [];
|
|
56
53
|
}
|
|
57
54
|
testFixture() {
|
|
58
55
|
return ['$test: ({}, use) => use(test),'];
|
|
@@ -73,13 +70,12 @@ class Formatter {
|
|
|
73
70
|
if (node.flags.fixme) return '.fixme';
|
|
74
71
|
return '';
|
|
75
72
|
}
|
|
76
|
-
|
|
77
73
|
/**
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
74
|
+
* Apply this function only to string literals (mostly titles here).
|
|
75
|
+
* Objects and arrays are handled with JSON.strinigfy,
|
|
76
|
+
* b/c object keys can't be in backtiks.
|
|
77
|
+
* See: https://stackoverflow.com/questions/33194138/template-string-as-object-property-name
|
|
78
|
+
*/
|
|
83
79
|
quoted(str) {
|
|
84
80
|
return (0, _jsStringWrap.jsStringWrap)(str, {
|
|
85
81
|
quotes: this.config.quotes
|
|
@@ -10,14 +10,11 @@ var _gherkin = require("@cucumber/gherkin");
|
|
|
10
10
|
* See: https://github.com/cucumber/cucumber-js/blob/main/src/cli/i18n.ts
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
// todo: cache targetMap
|
|
14
|
-
|
|
15
13
|
function getKeywordsMap(language) {
|
|
16
14
|
const origMap = _gherkin.dialects[language];
|
|
17
15
|
if (!origMap) {
|
|
18
16
|
throw new Error(`Language not found: ${language}`);
|
|
19
17
|
}
|
|
20
|
-
;
|
|
21
18
|
const targetMap = new Map();
|
|
22
19
|
const enKeywords = Object.keys(origMap);
|
|
23
20
|
enKeywords.forEach(enKeyword => handleKeyword(enKeyword, origMap, targetMap));
|
|
@@ -26,16 +23,10 @@ function getKeywordsMap(language) {
|
|
|
26
23
|
function handleKeyword(enKeyword, origMap, targetMap) {
|
|
27
24
|
const nativeKeywords = origMap[enKeyword];
|
|
28
25
|
// Array.isArray converts to any[]
|
|
29
|
-
if (typeof nativeKeywords === 'string')
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
;
|
|
26
|
+
if (typeof nativeKeywords === 'string') return;
|
|
33
27
|
nativeKeywords.forEach(nativeKeyword => {
|
|
34
28
|
nativeKeyword = nativeKeyword.trim();
|
|
35
|
-
if (!nativeKeyword || nativeKeyword === '*')
|
|
36
|
-
return;
|
|
37
|
-
}
|
|
38
|
-
;
|
|
29
|
+
if (!nativeKeyword || nativeKeyword === '*') return;
|
|
39
30
|
targetMap.set(nativeKeyword, capitalizeFirstLetter(enKeyword));
|
|
40
31
|
});
|
|
41
32
|
}
|
|
@@ -15,7 +15,7 @@ var _loadSteps = require("../cucumber/loadSteps");
|
|
|
15
15
|
var _config = require("../config");
|
|
16
16
|
var _utils = require("../utils");
|
|
17
17
|
var _snippets = require("../snippets");
|
|
18
|
-
var
|
|
18
|
+
var _steps = require("../stepDefinitions/decorators/steps");
|
|
19
19
|
var _transform = require("../playwright/transform");
|
|
20
20
|
var _dir = require("../config/dir");
|
|
21
21
|
var _logger = require("../utils/logger");
|
|
@@ -24,17 +24,20 @@ var _tagExpressions = _interopRequireDefault(require("@cucumber/tag-expressions"
|
|
|
24
24
|
* Generate playwright test files from Gherkin documents.
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
|
-
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
28
|
-
|
|
29
27
|
class TestFilesGenerator {
|
|
28
|
+
config;
|
|
30
29
|
// all these props are exist
|
|
31
30
|
runConfiguration;
|
|
32
31
|
features;
|
|
33
32
|
supportCodeLibrary;
|
|
34
33
|
files = [];
|
|
35
34
|
tagsExpression;
|
|
35
|
+
logger;
|
|
36
36
|
constructor(config) {
|
|
37
37
|
this.config = config;
|
|
38
|
+
this.logger = new _logger.Logger({
|
|
39
|
+
verbose: config.verbose
|
|
40
|
+
});
|
|
38
41
|
if (config.tags) this.tagsExpression = (0, _tagExpressions.default)(config.tags);
|
|
39
42
|
}
|
|
40
43
|
async generate() {
|
|
@@ -67,14 +70,22 @@ class TestFilesGenerator {
|
|
|
67
70
|
const environment = {
|
|
68
71
|
cwd: (0, _dir.getPlaywrightConfigDir)()
|
|
69
72
|
};
|
|
73
|
+
this.logger.log(`Loading features from: ${this.runConfiguration.sources.paths.join(', ')}`);
|
|
70
74
|
this.features = await (0, _loadFeatures.loadFeatures)(this.runConfiguration, environment);
|
|
75
|
+
this.logger.log(`Loaded features: ${this.features.size}`);
|
|
71
76
|
}
|
|
72
77
|
async loadSteps() {
|
|
78
|
+
const {
|
|
79
|
+
requirePaths,
|
|
80
|
+
importPaths
|
|
81
|
+
} = this.runConfiguration.support;
|
|
82
|
+
this.logger.log(`Loading steps from: ${requirePaths.concat(importPaths).join(', ')}`);
|
|
73
83
|
const environment = {
|
|
74
84
|
cwd: (0, _dir.getPlaywrightConfigDir)()
|
|
75
85
|
};
|
|
76
86
|
this.supportCodeLibrary = await (0, _loadSteps.loadSteps)(this.runConfiguration, environment);
|
|
77
87
|
await this.loadDecoratorSteps();
|
|
88
|
+
this.logger.log(`Loaded steps: ${this.supportCodeLibrary.stepDefinitions.length}`);
|
|
78
89
|
}
|
|
79
90
|
async loadDecoratorSteps() {
|
|
80
91
|
const {
|
|
@@ -84,7 +95,7 @@ class TestFilesGenerator {
|
|
|
84
95
|
// require importTestFrom for case when it is not required by step definitions
|
|
85
96
|
// possible re-require but it's not a problem as it is cached by Node.js
|
|
86
97
|
await (0, _transform.requireTransform)().requireOrImport(importTestFrom.file);
|
|
87
|
-
(0,
|
|
98
|
+
(0, _steps.appendDecoratorSteps)(this.supportCodeLibrary);
|
|
88
99
|
}
|
|
89
100
|
}
|
|
90
101
|
buildFiles() {
|
|
@@ -103,8 +114,7 @@ class TestFilesGenerator {
|
|
|
103
114
|
const configDir = (0, _dir.getPlaywrightConfigDir)();
|
|
104
115
|
// doc.uri is always relative to cwd (coming after cucumber handling)
|
|
105
116
|
// see: https://github.com/cucumber/cucumber-js/blob/main/src/api/gherkin.ts#L51
|
|
106
|
-
|
|
107
|
-
const relFeaturePath = doc.uri !== null ? doc.uri : null;
|
|
117
|
+
const relFeaturePath = doc.uri;
|
|
108
118
|
const absFeaturePath = _path.default.resolve(configDir, relFeaturePath);
|
|
109
119
|
const relOutputPath = _path.default.relative(this.config.featuresRoot, absFeaturePath);
|
|
110
120
|
if (relOutputPath.startsWith('..')) {
|
|
@@ -130,20 +140,20 @@ class TestFilesGenerator {
|
|
|
130
140
|
async saveFiles() {
|
|
131
141
|
this.files.forEach(file => {
|
|
132
142
|
file.save();
|
|
133
|
-
|
|
134
|
-
_logger.logger.log(`Generated: ${_path.default.relative(process.cwd(), file.outputPath)}`);
|
|
135
|
-
}
|
|
143
|
+
this.logger.log(`Generated: ${_path.default.relative(process.cwd(), file.outputPath)}`);
|
|
136
144
|
});
|
|
137
|
-
|
|
145
|
+
this.logger.log(`Generated files: ${this.files.length}`);
|
|
138
146
|
}
|
|
139
147
|
async clearOutputDir() {
|
|
140
|
-
const
|
|
148
|
+
const pattern = `${_fastGlob.default.convertPathToPattern(this.config.outputDir)}/**/*.spec.js`;
|
|
149
|
+
const testFiles = await (0, _fastGlob.default)(pattern);
|
|
150
|
+
this.logger.log(`Clearing output dir: ${testFiles.length} file(s)`);
|
|
141
151
|
const tasks = testFiles.map(testFile => _promises.default.rm(testFile));
|
|
142
152
|
await Promise.all(tasks);
|
|
143
153
|
}
|
|
144
154
|
warnForTsNodeRegister() {
|
|
145
155
|
if ((0, _loadSteps.hasTsNodeRegister)(this.runConfiguration)) {
|
|
146
|
-
|
|
156
|
+
this.logger.warn(`WARNING: usage of requireModule: ['ts-node/register'] is not recommended for playwright-bdd.`, `Remove this option from defineBddConfig() and`, `Playwright's built-in loader will be used to compile TypeScript step definitions.`);
|
|
147
157
|
}
|
|
148
158
|
}
|
|
149
159
|
}
|
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.POMS = void 0;
|
|
7
7
|
exports.buildFixtureTag = buildFixtureTag;
|
|
8
8
|
var _createDecorators = require("../stepDefinitions/createDecorators");
|
|
9
|
-
var _defineStep = require("../stepDefinitions/defineStep");
|
|
10
9
|
/**
|
|
11
10
|
* Handle POMs graph for decorator steps.
|
|
12
11
|
*/
|