Skip to content

Commit 2d0f7cb

Browse files
authored
Merge pull request #2745 from ktryniszewski-mdsol/fix_gherkin
Fix error suppression for failed gherkin step
2 parents 4e64c7d + 56fc0ec commit 2d0f7cb

File tree

2 files changed

+51
-9
lines changed

2 files changed

+51
-9
lines changed

lib/interfaces/gherkin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ module.exports = (text) => {
5353
} catch (err) {
5454
step.status = 'failed';
5555
step.err = err;
56-
return err;
56+
throw err;
5757
} finally {
5858
step.endTime = Date.now();
5959
event.dispatcher.removeListener(event.step.before, setMetaStep);

test/unit/bdd_test.js

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,17 @@ const text = `
2626
When I go to checkout process
2727
`;
2828

29+
const checkTestForErrors = (test) => {
30+
return new Promise((resolve, reject) => {
31+
test.fn((err) => {
32+
if (err) {
33+
return reject(err);
34+
}
35+
resolve();
36+
});
37+
});
38+
};
39+
2940
describe('BDD', () => {
3041
beforeEach(() => {
3142
clearSteps();
@@ -82,18 +93,49 @@ describe('BDD', () => {
8293
});
8394
});
8495

85-
it('should allow failed steps', (done) => {
96+
it('should allow failed steps', async () => {
8697
let sum = 0;
8798
Given(/I have product with (\d+) price/, param => sum += parseInt(param, 10));
88-
When('I go to checkout process', () => expect(false).is.false);
99+
When('I go to checkout process', () => expect(false).is.true);
89100
const suite = run(text);
90101
expect('checkout process').is.equal(suite.title);
91-
let errored = false;
92-
suite.tests[0].fn((err) => {
93-
errored = !!err;
94-
expect(errored).is.exist;
95-
done();
96-
});
102+
try {
103+
await checkTestForErrors(suite.tests[0]);
104+
return Promise.reject((new Error('Test should have thrown with failed step, but did not')));
105+
} catch (err) {
106+
const errored = !!err;
107+
expect(errored).is.true;
108+
}
109+
});
110+
111+
it('handles errors in steps', async () => {
112+
let sum = 0;
113+
Given(/I have product with (\d+) price/, param => sum += parseInt(param, 10));
114+
When('I go to checkout process', () => { throw new Error('errored step'); });
115+
const suite = run(text);
116+
expect('checkout process').is.equal(suite.title);
117+
try {
118+
await checkTestForErrors(suite.tests[0]);
119+
return Promise.reject((new Error('Test should have thrown with error, but did not')));
120+
} catch (err) {
121+
const errored = !!err;
122+
expect(errored).is.true;
123+
}
124+
});
125+
126+
it('handles async errors in steps', async () => {
127+
let sum = 0;
128+
Given(/I have product with (\d+) price/, param => sum += parseInt(param, 10));
129+
When('I go to checkout process', () => Promise.reject(new Error('step failed')));
130+
const suite = run(text);
131+
expect('checkout process').is.equal(suite.title);
132+
try {
133+
await checkTestForErrors(suite.tests[0]);
134+
return Promise.reject((new Error('Test should have thrown with error, but did not')));
135+
} catch (err) {
136+
const errored = !!err;
137+
expect(errored).is.true;
138+
}
97139
});
98140

99141
it('should work with async functions', (done) => {

0 commit comments

Comments
 (0)