@lynxwall/cucumber-tsflow 5.0.8 → 5.1.1
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/README.md +80 -38
- package/lib/cli/index.js +16 -10
- package/lib/cli/load-configuration.js +11 -5
- package/lib/cucumber/binding-decorator.js +4 -5
- package/lib/cucumber/message-collector.d.ts +34 -9
- package/lib/cucumber/message-collector.js +133 -25
- package/lib/cucumber/parallel/coordinator.d.ts +78 -0
- package/lib/cucumber/parallel/coordinator.js +228 -0
- package/lib/cucumber/parallel/run-worker.d.ts +1 -0
- package/lib/cucumber/parallel/run-worker.js +32 -0
- package/lib/cucumber/parallel/worker.d.ts +31 -0
- package/lib/cucumber/parallel/worker.js +104 -0
- package/lib/cucumber/run-cucumber.d.ts +14 -0
- package/lib/cucumber/run-cucumber.js +118 -0
- package/lib/cucumber/runtime.d.ts +25 -0
- package/lib/cucumber/runtime.js +40 -0
- package/lib/utils/our-callsite.js +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +17 -15
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# cucumber-tsflow
|
|
4
4
|
|
|
5
|
-
Provides 'specflow' like bindings for CucumberJS 8.
|
|
5
|
+
Provides 'specflow' like bindings for CucumberJS 8.5.0+ in TypeScript 1.7+.
|
|
6
6
|
|
|
7
7
|
Supports Vue3 files in cucumber tests.
|
|
8
8
|
|
|
@@ -18,6 +18,7 @@ In addition, the following features have been added:
|
|
|
18
18
|
- WrapperOptions in step definitions
|
|
19
19
|
- BeforeStep and AfterStep Hooks
|
|
20
20
|
- Boolean custom definition added to cucumber expressions
|
|
21
|
+
- Support for Parallel execution of tests
|
|
21
22
|
- A behave-json-formatter that fixes json so it can be used with Behave Pro
|
|
22
23
|
- tsflow-snippet-syntax used to format snippet examples
|
|
23
24
|
- snippets use the [Cucumber Expressions](https://github.com/cucumber/cucumber-expressions#readme) Syntax for parameters
|
|
@@ -113,19 +114,22 @@ As mentioned previously, with recent updates cucumber-tsflow must be used to exe
|
|
|
113
114
|
The following example demonstrates executing cucumber-tsflow from the command line to execute tests:
|
|
114
115
|
|
|
115
116
|
```bash
|
|
116
|
-
C:\GitHub\cucumber-js-tsflow (
|
|
117
|
-
λ
|
|
117
|
+
C:\GitHub\cucumber-js-tsflow (dev -> origin)
|
|
118
|
+
λ yarn test
|
|
118
119
|
Loading configuration and step definitions...
|
|
119
|
-
|
|
120
|
+
|
|
121
|
+
beforeAll was called
|
|
120
122
|
......@basic after hook is called.
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
123
|
+
.......@basic after hook is called.
|
|
124
|
+
.......@basic after hook is called.
|
|
125
|
+
...........@tags1 after hook is called.
|
|
126
|
+
......@tagging afterTag method is called
|
|
127
|
+
.........<Suspense> is an experimental feature and its API will likely change.
|
|
128
|
+
..afterAll was called
|
|
129
|
+
|
|
130
|
+
8 scenarios (8 passed)
|
|
131
|
+
24 steps (24 passed)
|
|
132
|
+
0m00.076s (executing steps: 0m00.040s)
|
|
129
133
|
```
|
|
130
134
|
|
|
131
135
|
To recap, cucumber-tsflow extends cucumber-js, which means that all options and features provided by cucumber-js are supported with cucumber-tsflow. In other words, when executing tests using cucumber-tsflow the underlying cucumber API is actually used to run the tests.
|
|
@@ -194,10 +198,10 @@ If using VSCode to edit your project the following launch configurations can be
|
|
|
194
198
|
```json
|
|
195
199
|
{
|
|
196
200
|
"name": "Debug All",
|
|
197
|
-
"type": "
|
|
201
|
+
"type": "node",
|
|
198
202
|
"request": "launch",
|
|
199
203
|
"program": "${workspaceRoot}/node_modules/@lynxwall/cucumber-tsflow/bin/cucumber-tsflow",
|
|
200
|
-
"stopOnEntry":
|
|
204
|
+
"stopOnEntry": true,
|
|
201
205
|
"args": ["-p", "default"],
|
|
202
206
|
"cwd": "${workspaceRoot}",
|
|
203
207
|
"runtimeExecutable": null,
|
|
@@ -205,10 +209,8 @@ If using VSCode to edit your project the following launch configurations can be
|
|
|
205
209
|
"env": {
|
|
206
210
|
"NODE_ENV": "development"
|
|
207
211
|
},
|
|
208
|
-
"externalConsole": false,
|
|
209
212
|
"console": "integratedTerminal",
|
|
210
|
-
"sourceMaps": true
|
|
211
|
-
"outDir": null
|
|
213
|
+
"sourceMaps": true
|
|
212
214
|
}
|
|
213
215
|
```
|
|
214
216
|
|
|
@@ -217,10 +219,10 @@ If using VSCode to edit your project the following launch configurations can be
|
|
|
217
219
|
```json
|
|
218
220
|
{
|
|
219
221
|
"name": "Debug Feature",
|
|
220
|
-
"type": "
|
|
222
|
+
"type": "node",
|
|
221
223
|
"request": "launch",
|
|
222
224
|
"program": "${workspaceRoot}/node_modules/@lynxwall/cucumber-tsflow/bin/cucumber-tsflow",
|
|
223
|
-
"stopOnEntry":
|
|
225
|
+
"stopOnEntry": true,
|
|
224
226
|
"args": ["--debug-file", "${file}", "-p", "default"],
|
|
225
227
|
"cwd": "${workspaceRoot}",
|
|
226
228
|
"runtimeExecutable": null,
|
|
@@ -228,10 +230,8 @@ If using VSCode to edit your project the following launch configurations can be
|
|
|
228
230
|
"env": {
|
|
229
231
|
"NODE_ENV": "development"
|
|
230
232
|
},
|
|
231
|
-
"externalConsole": false,
|
|
232
233
|
"console": "integratedTerminal",
|
|
233
|
-
"sourceMaps": true
|
|
234
|
-
"outDir": null
|
|
234
|
+
"sourceMaps": true
|
|
235
235
|
}
|
|
236
236
|
```
|
|
237
237
|
|
|
@@ -450,31 +450,73 @@ The following example shows how to configure the behave formatter in cucumber.js
|
|
|
450
450
|
|
|
451
451
|
### Context Injection
|
|
452
452
|
|
|
453
|
-
Like 'specflow', cucumber-tsflow supports a simple dependency injection framework that will instantitate and inject
|
|
454
|
-
class instances into 'binding' classes for each execuing scenario.
|
|
453
|
+
Like 'specflow', cucumber-tsflow supports a simple dependency injection framework that will instantitate and inject class instances into 'binding' classes for each execuing scenario.
|
|
455
454
|
|
|
456
455
|
To use context injection:
|
|
457
456
|
|
|
458
457
|
- Create simple classes representing the shared data (they *must* have default constructors)
|
|
459
|
-
- Define a constructor on the 'binding' classes that will require the shared data that accepts the context objects
|
|
460
|
-
|
|
461
|
-
- Update the `@binding()` decorator to indicate the types of context objects that are required by the 'binding'
|
|
462
|
-
class
|
|
458
|
+
- Define a constructor on the 'binding' classes that will require the shared data that accepts the context objects as parameters
|
|
459
|
+
- Update the `@binding()` decorator to indicate the types of context objects that are required by the 'binding' class
|
|
463
460
|
|
|
464
461
|
```javascript
|
|
465
|
-
import { binding,
|
|
466
|
-
import { Workspace } from
|
|
462
|
+
import { binding, given, when } from '@lynxwall/cucumber-tsflow';
|
|
463
|
+
import { Workspace } from './workspace';
|
|
464
|
+
import { expect } from 'chai';
|
|
467
465
|
|
|
468
466
|
@binding([Workspace])
|
|
469
|
-
export default class
|
|
470
|
-
|
|
471
|
-
{ }
|
|
467
|
+
export default class InjectionTestSteps1 {
|
|
468
|
+
constructor(private workspace: Workspace) {}
|
|
472
469
|
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
470
|
+
@given('The Workspace is available and valid')
|
|
471
|
+
theWorkspaceIsAvailableAndValid() {
|
|
472
|
+
expect(this.workspace).not.to.be.undefined;
|
|
473
|
+
expect(this.workspace.world).not.to.be.undefined;
|
|
474
|
+
}
|
|
476
475
|
|
|
477
|
-
|
|
478
|
-
|
|
476
|
+
@when('I change the workspace in one step definition class')
|
|
477
|
+
whenIChangeTheWorkspaceInOneStep() {
|
|
478
|
+
this.workspace.someValue = 'value changed';
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
### Access to Cucumber.js World object
|
|
484
|
+
|
|
485
|
+
The context object that you inject can also be configured to access the [World](https://github.com/cucumber/cucumber-js/blob/main/docs/support_files/world.md) object from Cucumber.js, which provides a method for adding attachments, a method for logging information from hooks/steps and an object of parameters passed in via configuration.
|
|
486
|
+
|
|
487
|
+
The first step is to define a world property on the class that you're injecting:
|
|
488
|
+
|
|
489
|
+
```javascript
|
|
490
|
+
import { World } from '@cucumber/cucumber';
|
|
491
|
+
|
|
492
|
+
export class Workspace {
|
|
493
|
+
public world!: World;
|
|
494
|
+
public someValue = '';
|
|
495
|
+
}
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
Next you'll need to initialize the world property in a ***@before*** hook so that it's available to all steps in a scenario. My approach is to add a new file to the steps folder that is dedicated to initializing the class (Workspace in this example) in a ***@before*** hook.
|
|
499
|
+
|
|
500
|
+
For this example I've added a file named world-context.ts with the following content:
|
|
501
|
+
|
|
502
|
+
```javascript
|
|
503
|
+
import { binding, before } from '@lynxwall/cucumber-tsflow';
|
|
504
|
+
import { Workspace } from './workspace';
|
|
505
|
+
import { World } from '@cucumber/cucumber';
|
|
506
|
+
|
|
507
|
+
@binding([Workspace])
|
|
508
|
+
export default class WorldContext {
|
|
509
|
+
_worldObj?: World;
|
|
510
|
+
|
|
511
|
+
constructor(private workspace: Workspace) {}
|
|
512
|
+
|
|
513
|
+
@before()
|
|
514
|
+
beforeScenario() {
|
|
515
|
+
this.workspace.world = this._worldObj as World;
|
|
516
|
+
}
|
|
479
517
|
}
|
|
480
518
|
```
|
|
519
|
+
|
|
520
|
+
As described in the section on Hooks, the ***beforeScenario*** function will be executed before each scenario. We're accessing a member property that was bound to the class instance during creation of each step class, and initializing the world property.
|
|
521
|
+
|
|
522
|
+
**NOTE:** Examples of this and other tests can be found in the GitHub repository.
|
package/lib/cli/index.js
CHANGED
|
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const messages_1 = require("@cucumber/messages");
|
|
7
7
|
const index_1 = require("@cucumber/cucumber/lib/configuration/index");
|
|
8
|
-
const
|
|
8
|
+
const run_cucumber_1 = require("../cucumber/run-cucumber");
|
|
9
9
|
const load_configuration_1 = require("./load-configuration");
|
|
10
10
|
const i18n_1 = require("@cucumber/cucumber/lib/cli/i18n");
|
|
11
11
|
const install_validator_1 = require("@cucumber/cucumber/lib/cli/install_validator");
|
|
@@ -14,7 +14,8 @@ const environment_1 = require("@cucumber/cucumber/lib/api/environment");
|
|
|
14
14
|
const support_1 = require("@cucumber/cucumber/lib/api/support");
|
|
15
15
|
const binding_registry_1 = require("../cucumber/binding-registry");
|
|
16
16
|
const argv_parser_1 = __importDefault(require("./argv-parser"));
|
|
17
|
-
const
|
|
17
|
+
const debug_1 = __importDefault(require("debug"));
|
|
18
|
+
const console_logger_1 = require("@cucumber/cucumber/lib/api/console_logger");
|
|
18
19
|
const console_1 = require("console");
|
|
19
20
|
class Cli {
|
|
20
21
|
constructor({ argv, cwd, stdout, stderr, env }) {
|
|
@@ -25,7 +26,7 @@ class Cli {
|
|
|
25
26
|
this.env = env;
|
|
26
27
|
}
|
|
27
28
|
async run() {
|
|
28
|
-
await (0, install_validator_1.validateInstall)(
|
|
29
|
+
await (0, install_validator_1.validateInstall)();
|
|
29
30
|
const { options, configuration: argvConfiguration } = argv_parser_1.default.parse(this.argv);
|
|
30
31
|
if (options.i18nLanguages) {
|
|
31
32
|
this.stdout.write((0, i18n_1.getLanguages)());
|
|
@@ -43,14 +44,16 @@ class Cli {
|
|
|
43
44
|
success: true
|
|
44
45
|
};
|
|
45
46
|
}
|
|
47
|
+
const enableDebug = debug_1.default.enabled('cucumber');
|
|
46
48
|
const environment = {
|
|
47
49
|
cwd: this.cwd,
|
|
48
50
|
stdout: this.stdout,
|
|
49
51
|
stderr: this.stderr,
|
|
50
|
-
env: this.env
|
|
52
|
+
env: this.env,
|
|
53
|
+
debug: enableDebug
|
|
51
54
|
};
|
|
52
|
-
const
|
|
53
|
-
|
|
55
|
+
const consoleLogger = new console_1.Console(environment.stdout, environment.stderr);
|
|
56
|
+
consoleLogger.info('Loading configuration and step definitions...\n');
|
|
54
57
|
const { useConfiguration: configuration, runConfiguration } = await (0, load_configuration_1.loadConfiguration)({
|
|
55
58
|
file: options.config,
|
|
56
59
|
profiles: options.profile,
|
|
@@ -61,7 +64,8 @@ class Cli {
|
|
|
61
64
|
const newId = messages_1.IdGenerator.uuid();
|
|
62
65
|
const runOptions = runConfiguration;
|
|
63
66
|
const supportCoordinates = 'World' in runOptions.support ? runOptions.support.originalCoordinates : runOptions.support;
|
|
64
|
-
const
|
|
67
|
+
const logger = new console_logger_1.ConsoleLogger(environment.stderr, enableDebug);
|
|
68
|
+
const { requirePaths, importPaths } = await (0, paths_1.resolvePaths)(logger, cwd, runOptions.sources, supportCoordinates);
|
|
65
69
|
// Load the step and hook definitions
|
|
66
70
|
const supportCodeLibrary = 'World' in runOptions.support
|
|
67
71
|
? runOptions.support
|
|
@@ -73,10 +77,12 @@ class Cli {
|
|
|
73
77
|
requireModules: supportCoordinates.requireModules
|
|
74
78
|
});
|
|
75
79
|
// Set support to the updated step and hook definitions
|
|
76
|
-
// in the supportCodeLibrary
|
|
80
|
+
// in the supportCodeLibrary. We also need to initialize originalCoordinates
|
|
81
|
+
// to support parallel execution.
|
|
77
82
|
runOptions.support = binding_registry_1.BindingRegistry.instance.updateSupportCodeLibrary(supportCodeLibrary);
|
|
83
|
+
runOptions.support = { ...runOptions.support, ...{ originalCoordinates: supportCoordinates } };
|
|
78
84
|
// now we can run cucumber
|
|
79
|
-
const { success } = await (0,
|
|
85
|
+
const { success } = await (0, run_cucumber_1.runCucumber)(runOptions, environment);
|
|
80
86
|
return {
|
|
81
87
|
shouldAdvertisePublish: !runConfiguration.formats.publish &&
|
|
82
88
|
!configuration.publishQuiet &&
|
|
@@ -87,4 +93,4 @@ class Cli {
|
|
|
87
93
|
}
|
|
88
94
|
}
|
|
89
95
|
exports.default = Cli;
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaURBQWlEO0FBQ2pELHNFQUE0RTtBQUc1RSwyREFBdUQ7QUFDdkQsNkRBQXlEO0FBQ3pELDBEQUE0RTtBQUM1RSxvRkFBK0U7QUFDL0UsNERBQWdFO0FBQ2hFLHdFQUEwRTtBQUMxRSxnRUFBMkU7QUFDM0UsbUVBQStEO0FBQy9ELGdFQUF1QztBQUN2QyxrREFBMEI7QUFFMUIsOEVBQTBFO0FBQzFFLHFDQUFrQztBQVFsQyxNQUFxQixHQUFHO0lBT3ZCLFlBQVksRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILE1BQU0sRUFDTixNQUFNLEVBQ04sR0FBRyxFQU9IO1FBQ0EsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUc7UUFDUixNQUFNLElBQUEsbUNBQWUsR0FBRSxDQUFDO1FBRXhCLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLEdBQUcscUJBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xGLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRTtZQUN6QixJQUFJLENBQUMsTUFBYyxDQUFDLEtBQUssQ0FBQyxJQUFBLG1CQUFZLEdBQUUsQ0FBQyxDQUFDO1lBQzNDLE9BQU87Z0JBQ04sc0JBQXNCLEVBQUUsS0FBSztnQkFDN0IscUJBQXFCLEVBQUUsSUFBSTtnQkFDM0IsT0FBTyxFQUFFLElBQUk7YUFDYixDQUFDO1NB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
|
|
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.loadConfiguration = void 0;
|
|
7
|
-
const console_1 = require("console");
|
|
8
7
|
const locate_file_1 = require("@cucumber/cucumber/lib/configuration/locate_file");
|
|
9
8
|
const index_1 = require("@cucumber/cucumber/lib/configuration/index");
|
|
10
9
|
const validate_configuration_1 = require("@cucumber/cucumber/lib/configuration/validate_configuration");
|
|
@@ -13,6 +12,7 @@ const environment_1 = require("@cucumber/cucumber/lib/api/environment");
|
|
|
13
12
|
const chalk_1 = __importDefault(require("chalk"));
|
|
14
13
|
const helpers_1 = require("../utils/helpers");
|
|
15
14
|
const gherkin_manager_1 = __importDefault(require("../gherkin/gherkin-manager"));
|
|
15
|
+
const console_logger_1 = require("@cucumber/cucumber/lib/api/console_logger");
|
|
16
16
|
/**
|
|
17
17
|
* Load user-authored configuration to be used in a test run.
|
|
18
18
|
*
|
|
@@ -21,10 +21,16 @@ const gherkin_manager_1 = __importDefault(require("../gherkin/gherkin-manager"))
|
|
|
21
21
|
* @param environment - Project environment.
|
|
22
22
|
*/
|
|
23
23
|
const loadConfiguration = async (options = {}, environment = {}) => {
|
|
24
|
-
const { cwd, env } = (0, environment_1.mergeEnvironment)(environment);
|
|
24
|
+
const { cwd, stderr, env, debug } = (0, environment_1.mergeEnvironment)(environment);
|
|
25
|
+
const logger = new console_logger_1.ConsoleLogger(stderr, debug);
|
|
25
26
|
const configFile = options.file ?? (0, locate_file_1.locateFile)(cwd);
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
if (configFile) {
|
|
28
|
+
logger.debug(`Configuration will be loaded from "${configFile}"`);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
logger.debug('No configuration file found');
|
|
32
|
+
}
|
|
33
|
+
const profileConfiguration = configFile ? await (0, index_1.fromFile)(logger, cwd, configFile, options.profiles) : {};
|
|
28
34
|
// if a feature was passed in on command line it's added
|
|
29
35
|
// to the provided configuration as paths. We need to clear
|
|
30
36
|
// any paths from configuration so that only the feature passed
|
|
@@ -84,4 +90,4 @@ const loadConfiguration = async (options = {}, environment = {}) => {
|
|
|
84
90
|
};
|
|
85
91
|
};
|
|
86
92
|
exports.loadConfiguration = loadConfiguration;
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1jb25maWd1cmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS9sb2FkLWNvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0Esa0ZBQThFO0FBQzlFLHNFQUtvRDtBQUNwRCx3R0FBb0c7QUFDcEcsNEZBQXdGO0FBQ3hGLHdFQUEwRTtBQUUxRSxrREFBMEI7QUFDMUIsOENBQWtEO0FBQ2xELGlGQUF3RDtBQUV4RCw4RUFBMEU7QUFZMUU7Ozs7OztHQU1HO0FBQ0ksTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEVBQ3JDLFVBQXFDLEVBQUUsRUFDdkMsY0FBK0IsRUFBRSxFQUNPLEVBQUU7SUFDMUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUEsOEJBQWdCLEVBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEUsTUFBTSxNQUFNLEdBQVksSUFBSSw4QkFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUV6RCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUEsd0JBQVUsRUFBQyxHQUFHLENBQUMsQ0FBQztJQUNuRCxJQUFJLFVBQVUsRUFBRTtRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLFVBQVUsR0FBRyxDQUFDLENBQUM7S0FDbEU7U0FBTTtRQUNOLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQztLQUM1QztJQUNELE1BQU0sb0JBQW9CLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUEsZ0JBQVEsRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUV6Ryx3REFBd0Q7SUFDeEQsMkRBQTJEO0lBQzNELCtEQUErRDtJQUMvRCxrQkFBa0I7SUFDbEIsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ2xFLG9CQUFvQixDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7S0FDaEM7SUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFBLDJCQUFtQixFQUNuQyw2QkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLE9BQU8sQ0FBQyxRQUFtQyxDQUNuQixDQUFDO0lBRTFCLFFBQVEsUUFBUSxDQUFDLFVBQVUsRUFBRTtRQUM1QixLQUFLLE9BQU87WUFDWCxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1lBQ25FLE1BQU07UUFDUCxLQUFLLE9BQU87WUFDWCxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1lBQ25FLE1BQU07UUFDUCxLQUFLLFFBQVE7WUFDWixRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQ3BFLE1BQU07UUFDUDtZQUNDLHdCQUF3QjtZQUN4QixRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQ3BFLE1BQU07S0FDUDtJQUNELHlCQUF5QjtJQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUU7UUFDMUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEdBQUcsMENBQTBDLENBQUM7S0FDbEY7SUFDRCx5QkFBeUI7SUFDekIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDMUUsSUFBSSxTQUFTLElBQUksQ0FBQyxFQUFFO1FBQ25CLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQzlELFFBQVEsRUFDUix5Q0FBeUMsQ0FDekMsQ0FBQztLQUNGO0lBRUQsNENBQTRDO0lBQzVDLElBQUksSUFBQSx3QkFBYyxFQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtRQUN2QyxJQUFJLFdBQVcsR0FBdUIsRUFBRSxDQUFDO1FBRXpDLHdEQUF3RDtRQUN4RCxNQUFNLE9BQU8sR0FBRyxJQUFJLHlCQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEUsSUFBSSxXQUFXLEVBQUU7WUFDaEIsV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUM7U0FDdEM7UUFDRCxJQUFJLElBQUEsd0JBQWMsRUFBQyxXQUFXLENBQUMsRUFBRTtZQUNoQyxRQUFRLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNwQixRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNqQzthQUFNO1lBQ04saURBQWlEO1lBQ2pELE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBSyxDQUFDLE1BQU0sQ0FBQywyQ0FBMkMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzRixNQUFNLENBQUMsSUFBSSxDQUFDLGVBQUssQ0FBQyxNQUFNLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDO1NBQzFEO0tBQ0Q7SUFFRCxJQUFBLDhDQUFxQixFQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSw0Q0FBb0IsRUFBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDM0QsT0FBTztRQUNOLGdCQUFnQixFQUFFLFFBQVE7UUFDMUIsZ0JBQWdCLEVBQUUsUUFBUTtLQUMxQixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBbkZXLFFBQUEsaUJBQWlCLHFCQW1GNUIifQ==
|
|
@@ -8,7 +8,6 @@ exports.binding = void 0;
|
|
|
8
8
|
const cucumber_1 = require("@cucumber/cucumber");
|
|
9
9
|
const binding_registry_1 = require("./binding-registry");
|
|
10
10
|
const step_binding_1 = require("../types/step-binding");
|
|
11
|
-
const message_collector_1 = __importDefault(require("./message-collector"));
|
|
12
11
|
const cucumber_2 = require("@cucumber/cucumber");
|
|
13
12
|
const underscore_1 = __importDefault(require("underscore"));
|
|
14
13
|
/**
|
|
@@ -76,7 +75,7 @@ const defineParameters = underscore_1.default.once(() => {
|
|
|
76
75
|
function bindStepDefinition(stepBinding) {
|
|
77
76
|
const bindingFunc = function () {
|
|
78
77
|
const bindingRegistry = binding_registry_1.BindingRegistry.instance;
|
|
79
|
-
const scenarioContext =
|
|
78
|
+
const scenarioContext = global.messageCollector.getStepScenarioContext(stepBinding);
|
|
80
79
|
if (scenarioContext) {
|
|
81
80
|
const matchingStepBindings = bindingRegistry.getStepBindings(stepBinding.stepPattern.toString(), scenarioContext.scenarioInfo.tags);
|
|
82
81
|
if (matchingStepBindings.length > 1) {
|
|
@@ -97,7 +96,7 @@ function bindStepDefinition(stepBinding) {
|
|
|
97
96
|
return bindingObject[matchingStepBindings[0].targetPropertyKey].apply(bindingObject, arguments);
|
|
98
97
|
}
|
|
99
98
|
else {
|
|
100
|
-
throw new Error('Unable to find the Scenario Context for
|
|
99
|
+
throw new Error('Unable to find the Scenario Context for a Step!');
|
|
101
100
|
}
|
|
102
101
|
};
|
|
103
102
|
Object.defineProperty(bindingFunc, 'length', {
|
|
@@ -131,7 +130,7 @@ function bindHook(stepBinding) {
|
|
|
131
130
|
return stepBinding.targetPrototype[stepBinding.targetPropertyKey].apply();
|
|
132
131
|
}
|
|
133
132
|
: function (arg) {
|
|
134
|
-
const scenarioContext =
|
|
133
|
+
const scenarioContext = global.messageCollector.getHookScenarioContext(arg);
|
|
135
134
|
if (scenarioContext) {
|
|
136
135
|
const contextTypes = binding_registry_1.BindingRegistry.instance.getContextTypesForTarget(stepBinding.targetPrototype);
|
|
137
136
|
const bindingObject = scenarioContext.getOrActivateBindingClass(stepBinding.targetPrototype, contextTypes);
|
|
@@ -179,4 +178,4 @@ function bindHook(stepBinding) {
|
|
|
179
178
|
}
|
|
180
179
|
}
|
|
181
180
|
}
|
|
182
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluZGluZy1kZWNvcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY3VjdW1iZXIvYmluZGluZy1kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsdUNBQXVDO0FBQ3ZDLGlEQVc0QjtBQUU1Qix5REFBa0U7QUFDbEUsd0RBQXNFO0FBRXRFLGlEQUF5RDtBQUN6RCw0REFBMkI7QUFLM0I7Ozs7Ozs7R0FPRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7QUFFMUU7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxvQkFBb0M7SUFDM0QsT0FBTyxDQUFJLE1BQW1DLEVBQUUsRUFBRTtRQUNqRCxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLE1BQU0sZUFBZSxHQUFHLGtDQUFlLENBQUMsUUFBUSxDQUFDO1FBQ2pELGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDdEYsTUFBTSxXQUFXLEdBQWtCLEVBQUUsQ0FBQztRQUN0QyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsZUFBZSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdEUsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUVoRixXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ2pDLElBQUksV0FBVyxDQUFDLFdBQVcsR0FBRywrQkFBZ0IsQ0FBQyxlQUFlLEVBQUU7Z0JBQy9ELElBQUksZ0JBQWdCLEdBQUcsd0JBQXdCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDeEYsSUFBSSxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7b0JBQ25DLGdCQUFn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
|
|
@@ -1,10 +1,43 @@
|
|
|
1
1
|
import * as messages from '@cucumber/messages';
|
|
2
2
|
import { StepBinding } from '../types/step-binding';
|
|
3
3
|
import { ManagedScenarioContext } from './managed-scenario-context';
|
|
4
|
-
|
|
4
|
+
export interface ITestCaseAttempt {
|
|
5
|
+
attempt: number;
|
|
6
|
+
willBeRetried: boolean;
|
|
7
|
+
gherkinDocument: messages.GherkinDocument;
|
|
8
|
+
pickle: messages.Pickle;
|
|
9
|
+
stepAttachments: Record<string, messages.Attachment[]>;
|
|
10
|
+
stepResults: Record<string, messages.TestStepResult>;
|
|
11
|
+
testCase: messages.TestCase;
|
|
12
|
+
worstTestStepResult: messages.TestStepResult;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Custom implementation of the EventDataCollector from cucumber.js
|
|
16
|
+
*
|
|
17
|
+
* This implements all of the functions from the original EventDataCollector along
|
|
18
|
+
* with new functions to support binding to tsFlow tests.
|
|
19
|
+
*
|
|
20
|
+
* By extending the original version we're also reducing the amount of data stored
|
|
21
|
+
* during test runs because the original MessageCollector was capturing the same
|
|
22
|
+
* pickle and testCase data that the EventDataCollector does.
|
|
23
|
+
*/
|
|
24
|
+
export default class MessageCollector {
|
|
25
|
+
private gherkinDocumentMap;
|
|
5
26
|
private pickleMap;
|
|
6
27
|
private testCaseMap;
|
|
28
|
+
private testCaseAttemptDataMap;
|
|
29
|
+
readonly undefinedParameterTypes: messages.UndefinedParameterType[];
|
|
7
30
|
private testCaseRunningMap;
|
|
31
|
+
addPickleAndTestCase(pickle: messages.Pickle, testCase: messages.TestCase): void;
|
|
32
|
+
getGherkinDocument(uri: string): messages.GherkinDocument;
|
|
33
|
+
getPickle(pickleId: string): messages.Pickle;
|
|
34
|
+
getTestCaseAttempts(): ITestCaseAttempt[];
|
|
35
|
+
getTestCaseAttempt(testCaseStartedId: string): ITestCaseAttempt;
|
|
36
|
+
parseEnvelope(envelope: messages.Envelope): void;
|
|
37
|
+
private initTestCaseAttempt;
|
|
38
|
+
storeAttachment(attachment: messages.Attachment): void;
|
|
39
|
+
storeTestStepResult({ testCaseStartedId, testStepId, testStepResult }: messages.TestStepFinished): void;
|
|
40
|
+
storeTestCaseResult({ testCaseStartedId, willBeRetried }: messages.TestCaseFinished): void;
|
|
8
41
|
/**
|
|
9
42
|
* Gets the Pickle from hook parameters passed in from Cucumber
|
|
10
43
|
* to find a matching Pickle (scenario) and return the scenario Context
|
|
@@ -19,12 +52,6 @@ declare class MessageCollector {
|
|
|
19
52
|
* @returns
|
|
20
53
|
*/
|
|
21
54
|
getStepScenarioContext(stepBinding: StepBinding): ManagedScenarioContext | undefined;
|
|
22
|
-
/**
|
|
23
|
-
* Passed into runCucumber as a callback for all messages.
|
|
24
|
-
* Capture the ones we care about
|
|
25
|
-
* @param envelope
|
|
26
|
-
*/
|
|
27
|
-
parseEnvelope(envelope: messages.Envelope): void;
|
|
28
55
|
/**
|
|
29
56
|
* Called when a test case (scenario) starts. Intercepting
|
|
30
57
|
* this message to initialize a new ScenarioContext
|
|
@@ -51,5 +78,3 @@ declare class MessageCollector {
|
|
|
51
78
|
*/
|
|
52
79
|
private stepHasTags;
|
|
53
80
|
}
|
|
54
|
-
declare const messageCollector: MessageCollector;
|
|
55
|
-
export default messageCollector;
|