Skip to content

Commit d260295

Browse files
added memory value parameter type (#192) (#193)
* added memory value parameter type (#192) * added _validation_ parameter type (#194) * added validation to world (#195) * updated validation parameter type (#196) * fixed d.ts for new _MemoryValue_ and _Validation_ types (#201) * added memory to world (#202) * made getValue as any --------- Co-authored-by: Alexandr Legchilov <[email protected]>
1 parent 8129f3f commit d260295

File tree

14 files changed

+739
-375
lines changed

14 files changed

+739
-375
lines changed

.github/workflows/pull-request.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ on:
44
pull_request:
55
branches:
66
- main
7+
- v1
8+
- v2
79

810
jobs:
911
unix:

CHANGELOG.MD

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,23 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how
1010
:pencil: - chore
1111
:microscope: - experimental
1212

13-
## [unreleased]
14-
- :beetle: fixed publishing workflow
15-
- :pencil: updated dependencies
13+
## 2.1.1
14+
- :pencil: bump memory version
1615

17-
## 2.0.0
18-
- :rocket: added v2 implementation
16+
## 2.1.0
17+
- :rocket: added memory to world
18+
- :rocket: updated `world.getValue` and `world.setValue` to use bound memory
19+
20+
## 2.0.2
21+
- :beetle: fixed d.ts for new _MemoryValue_ and _Validation_ types
22+
23+
## 2.0.1
24+
- :rocket: adjust dependencies
25+
26+
## 2.0.0
27+
- :rocket: package renamed to @qavajs/core
28+
- :rocket: added _value_ parameter type
29+
- :rocket: added _validation_ parameter type
1930

2031
## 0.40.0
2132
- :rocket: added config type definition

README.MD

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
[![npm version](https://badge.fury.io/js/@qavajs%2Fcli.svg)](https://badge.fury.io/js/@qavajs%2Fcli)
1+
[![npm version](https://badge.fury.io/js/@qavajs%2Fcore.svg)](https://badge.fury.io/js/@qavajs%2Fcore)
22

3-
## @qavajs/cli
3+
## @qavajs/core
44

5-
Cli for @qavajs framework.
5+
@qavajs framework core
66

7-
`npm install @qavajs/cli`
7+
`npm install @qavajs/core`
88

99
Run tests
1010

@@ -51,12 +51,34 @@ All params that you passed to qavajs cli will be available in CLI_ARGV environme
5151

5252
### Override step definition
5353
```javascript
54-
const { Override } = require('@qavajs/cli/utils');
54+
const { Override } = require('@qavajs/core/utils');
5555

5656
When('I do test', async function() {});
5757

5858
Override('I do test', async function() {
59-
console.log('I am overridden')
59+
console.log('I am overridden');
60+
});
61+
```
62+
63+
### Memory value parameter type
64+
_value_ parameter type provides API to access memory
65+
66+
```javascript
67+
When('Read memory {value}', async function(memoryValue) {
68+
expect(memoryValue.value()).to.equal('ts');
69+
});
70+
71+
When('Set memory {value} as {string}', async function(memoryKey, value) {
72+
memoryKey.set(value);
73+
});
74+
```
75+
76+
### Validation parameter type
77+
_validation_ parameter type provides API to verify values by certain condition
78+
79+
```javascript
80+
When('I expect {string} {validation} {string}', async function(value1, validate, value2) {
81+
validate(value1, value2);
6082
});
6183
```
6284

@@ -92,3 +114,4 @@ Module extends CucumberJS world with additional entities
92114
| executeStep | function | programmatically execute certain step definition | `await this.executeStep("I type 'username' to 'Username Input'");` |
93115
| setValue | function | set memory value | `await this.setValue('key', 'value');` |
94116
| getValue | function | get memory value or expression | `await this.getValue('$key');` |
117+
| validation | function | get validation function based | `await this.getValue('to equal');` |

index.d.ts

Lines changed: 152 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,152 @@
1-
export * from './src/IQavajsWorld';
2-
export * from './src/IQavajsConfig';
1+
import { DataTable, IWorld } from '@cucumber/cucumber';
2+
import { IConfiguration, IRunResult } from '@cucumber/cucumber/api';
3+
4+
/**
5+
* Validation function
6+
* @example
7+
* expect(actualValue, expectedValue);
8+
* expect.poll(actualValue, expectedValue)
9+
*/
10+
export interface Validation {
11+
/**
12+
* Perform polling validation
13+
* @param {any} actualResult - actual result
14+
* @param {any} expectedResult - expected result
15+
*/
16+
(actualResult: any, expectedResult: any): void;
17+
/**
18+
* @property
19+
* original expression passed to memory value
20+
*/
21+
type: string;
22+
/**
23+
* Perform polling validation
24+
* @param {any} actualResult - actual result
25+
* @param {any} expectedResult - expected result
26+
* @param {number} options.timeout - timeout to poll
27+
* @param {number} options.interval - interval to poll
28+
*/
29+
poll: (AR: any, ER: any, options?: {timeout?: number, interval?: number}) => Promise<unknown>
30+
}
31+
32+
/**
33+
* Memory value
34+
* @example
35+
* memoryValue.value();
36+
* memoryValue.set('some data')
37+
*/
38+
export interface MemoryValue {
39+
/**
40+
* @property
41+
* original expression passed to memory value
42+
*/
43+
expression: string;
44+
/**
45+
* Return resolved value
46+
* @example
47+
* url.value()
48+
* @return Promise<any>
49+
*/
50+
value(): any;
51+
52+
/**
53+
* Set value to memory with provided key
54+
* @param {any} value - value to set
55+
* @example
56+
* url.set('https://qavajs.github.io/')
57+
*/
58+
set(value: any): void;
59+
}
60+
61+
export interface IQavajsWorld extends IWorld {
62+
/**
63+
* Get value from memory
64+
* @param {any} expression - expression to parse
65+
*/
66+
getValue(expression: any): any;
67+
68+
/**
69+
* Save value to memory
70+
* @param {string} key - key to store
71+
* @param {any} value - value to store
72+
*/
73+
setValue(key: string, value: any): void;
74+
75+
/**
76+
* Execute existing step definition
77+
* @param {string} step - cucumber expression to execute
78+
* @param {DataTable | string} extraParam - extra data table or multiline string
79+
*/
80+
executeStep(step: string, extraParam?: DataTable | string): Promise<void>;
81+
82+
/**
83+
* Return validation function by provided type
84+
* @param {string} type - type of validation
85+
*/
86+
validation(type: string): Validation;
87+
88+
/**
89+
* qavajs config
90+
*/
91+
config: any;
92+
}
93+
94+
export interface IQavajsConfig extends Partial<IConfiguration> {
95+
/**
96+
* instance of memory object
97+
*
98+
* default: {}
99+
* @example
100+
* import Memory from './memory/Memory';
101+
*
102+
* export default {
103+
* memory: new Memory()
104+
* }
105+
*/
106+
memory?: Object,
107+
/**
108+
* Cucumber steps timeout
109+
*
110+
* default: 10_000
111+
* @example
112+
* export default {
113+
* defaultTimeout: 20_000
114+
* }
115+
*/
116+
defaultTimeout?: number,
117+
/**
118+
* Qavajs services
119+
*
120+
* default: []
121+
* @example
122+
* export default {
123+
* service: [{
124+
* before() {
125+
* console.log('service started');
126+
* },
127+
* after(result: IRunResult) {
128+
* console.log(result.success);
129+
* }
130+
* }]
131+
* }
132+
*/
133+
service?: Array<{ before?: () => void, after: (result: IRunResult) => void }>,
134+
/**
135+
* Qavajs service timeout
136+
*
137+
* default: []
138+
* @example
139+
* export default {
140+
* service: [{
141+
* before() {
142+
* console.log('service started');
143+
* },
144+
* after(result: IRunResult) {
145+
* console.log(result.success);
146+
* }
147+
* }],
148+
* serviceTimeout: 30_000
149+
* }
150+
*/
151+
serviceTimeout?: number
152+
}

0 commit comments

Comments
 (0)