Skip to content

Commit e0d043d

Browse files
josselinbuilslgandecki
authored andcommitted
feat: Adds defineStep method (#173)
As a step could be used with different keywords, like Given and When for example, defineStep will allow to create a step without linking it to an unique keyword in the code.
1 parent fe4f137 commit e0d043d

File tree

6 files changed

+34
-3
lines changed

6 files changed

+34
-3
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Feature: Using defineStep
2+
Scenario: Should be able to use steps defined with defineStep
3+
When I set the value to 2
4+
Then The value equals 2
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/* global defineStep */
2+
3+
let storedValue = 0;
4+
5+
defineStep("I set the value to {int}", value => {
6+
storedValue = value;
7+
});
8+
9+
defineStep("The value equals {int}", expectedValue => {
10+
expect(storedValue).to.equal(expectedValue);
11+
});

lib/loader.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ const { getStepDefinitionsPaths } = require("./getStepDefinitionsPaths");
66
// feature file
77
const createCucumber = (spec, toRequire) =>
88
`
9-
const {resolveAndRunStepDefinition, defineParameterType, given, when, then, and, but} = require('cypress-cucumber-preprocessor/lib/resolveStepDefinition');
9+
const {resolveAndRunStepDefinition, defineParameterType, given, when, then, and, but, defineStep} = require('cypress-cucumber-preprocessor/lib/resolveStepDefinition');
1010
const Given = window.Given = window.given = given;
1111
const When = window.When = window.when = when;
1212
const Then = window.Then = window.then = then;
1313
const And = window.And = window.and = and;
1414
const But = window.But = window.but = but;
1515
window.defineParameterType = defineParameterType;
16+
window.defineStep = defineStep;
1617
const { createTestsFromFeature } = require('cypress-cucumber-preprocessor/lib/createTestsFromFeature');
1718
${eval(toRequire).join("\n")}
1819
const {Parser, Compiler} = require('gherkin');

lib/resolveStepDefinition.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,5 +138,8 @@ module.exports = {
138138
but: (expression, implementation) => {
139139
stepDefinitionRegistry.runtime(expression, implementation);
140140
},
141+
defineStep: (expression, implementation) => {
142+
stepDefinitionRegistry.runtime(expression, implementation);
143+
},
141144
defineParameterType: defineParameterType(stepDefinitionRegistry)
142145
};

lib/resolveStepDefinition.test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ const { Parser } = require("gherkin");
55
const { createTestsFromFeature } = require("./createTestsFromFeature");
66
const {
77
defineParameterType,
8+
defineStep,
89
when,
910
then,
1011
given,
@@ -18,6 +19,7 @@ window.then = then;
1819
window.given = given;
1920
window.and = and;
2021
window.but = but;
22+
window.defineStep = defineStep;
2123
window.cy = {
2224
log: jest.fn()
2325
};
@@ -145,3 +147,11 @@ describe("And and But", () => {
145147
readAndParseFeatureFile("./cypress/integration/AndAndButSteps.feature")
146148
);
147149
});
150+
151+
describe("defineStep", () => {
152+
require("../cypress/support/step_definitions/usingDefineSteps");
153+
154+
createTestsFromFeature(
155+
readAndParseFeatureFile("./cypress/integration/DefineStep.feature")
156+
);
157+
});

steps.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ const {
77
then,
88
and,
99
but,
10-
defineParameterType
10+
defineParameterType,
11+
defineStep
1112
} = require("./lib/resolveStepDefinition");
1213

1314
module.exports = {
@@ -21,5 +22,6 @@ module.exports = {
2122
Then: then,
2223
And: and,
2324
But: but,
24-
defineParameterType
25+
defineParameterType,
26+
defineStep
2527
};

0 commit comments

Comments
 (0)