diff --git a/lib/helper/Playwright.js b/lib/helper/Playwright.js index 2c76f9065..da925758e 100644 --- a/lib/helper/Playwright.js +++ b/lib/helper/Playwright.js @@ -474,7 +474,7 @@ class Playwright extends Helper { async _before(test) { this.currentRunningTest = test; recorder.retry({ - retries: 5, + retries: process.env.FAILED_STEP_RETIRES || 3, when: err => { if (!err || typeof (err.message) !== 'string') { return false; diff --git a/lib/helper/Puppeteer.js b/lib/helper/Puppeteer.js index 76f1ac2b5..0d865952d 100644 --- a/lib/helper/Puppeteer.js +++ b/lib/helper/Puppeteer.js @@ -297,7 +297,7 @@ class Puppeteer extends Helper { this.sessionPages = {}; this.currentRunningTest = test; recorder.retry({ - retries: 3, + retries: process.env.FAILED_STEP_RETIRES || 3, when: err => { if (!err || typeof (err.message) !== 'string') { return false; diff --git a/lib/plugin/retryFailedStep.js b/lib/plugin/retryFailedStep.js index 645eacdc7..606c7c1cc 100644 --- a/lib/plugin/retryFailedStep.js +++ b/lib/plugin/retryFailedStep.js @@ -114,6 +114,8 @@ module.exports = (config) => { event.dispatcher.on(event.test.before, (test) => { if (test && test.disableRetryFailedStep) return; // disable retry when a test is not active + // this env var is used to set the retries inside _before() block of helpers + process.env.FAILED_STEP_RETIRES = config.retries; recorder.retry(config); }); }; diff --git a/test/unit/plugin/retryFailedStep_test.js b/test/unit/plugin/retryFailedStep_test.js index 721aeadd9..fdaa2d763 100644 --- a/test/unit/plugin/retryFailedStep_test.js +++ b/test/unit/plugin/retryFailedStep_test.js @@ -36,6 +36,7 @@ describe('retryFailedStep', () => { }, undefined, undefined, true); return recorder.promise(); }); + it('should not retry within', async () => { retryFailedStep({ retries: 1, minTimeout: 1 }); event.dispatcher.emit(event.test.before, {}); @@ -51,9 +52,10 @@ describe('retryFailedStep', () => { }); await recorder.promise(); } catch (e) { - recorder.catchWithoutStop((err) => err); + await recorder.catchWithoutStop((err) => err); } + expect(process.env.FAILED_STEP_RETIRES).to.equal('1'); // expects to retry only once counter.should.equal(2); }); @@ -65,7 +67,7 @@ describe('retryFailedStep', () => { let counter = 0; event.dispatcher.emit(event.step.started, { name: 'waitForElement' }); try { - recorder.add(() => { + await recorder.add(() => { counter++; if (counter < 3) { throw new Error(); @@ -73,7 +75,7 @@ describe('retryFailedStep', () => { }, undefined, undefined, true); await recorder.promise(); } catch (e) { - recorder.catchWithoutStop((err) => err); + await recorder.catchWithoutStop((err) => err); } expect(counter).to.equal(1); @@ -87,7 +89,7 @@ describe('retryFailedStep', () => { let counter = 0; event.dispatcher.emit(event.step.started, { name: 'amOnPage' }); try { - recorder.add(() => { + await recorder.add(() => { counter++; if (counter < 3) { throw new Error(); @@ -95,7 +97,7 @@ describe('retryFailedStep', () => { }, undefined, undefined, true); await recorder.promise(); } catch (e) { - recorder.catchWithoutStop((err) => err); + await recorder.catchWithoutStop((err) => err); } expect(counter).to.equal(1); @@ -109,7 +111,7 @@ describe('retryFailedStep', () => { let counter = 0; event.dispatcher.emit(event.step.started, { name: 'somethingNew' }); try { - recorder.add(() => { + await recorder.add(() => { counter++; if (counter < 3) { throw new Error(); @@ -117,7 +119,7 @@ describe('retryFailedStep', () => { }, undefined, undefined, true); await recorder.promise(); } catch (e) { - recorder.catchWithoutStop((err) => err); + await recorder.catchWithoutStop((err) => err); } expect(counter).to.equal(1); @@ -131,7 +133,7 @@ describe('retryFailedStep', () => { let counter = 0; event.dispatcher.emit(event.step.started, { name: 'somethingNew' }); try { - recorder.add(() => { + await recorder.add(() => { counter++; if (counter < 3) { throw new Error(); @@ -139,7 +141,7 @@ describe('retryFailedStep', () => { }, undefined, undefined, true); await recorder.promise(); } catch (e) { - recorder.catchWithoutStop((err) => err); + await recorder.catchWithoutStop((err) => err); } expect(counter).to.equal(1); @@ -161,7 +163,7 @@ describe('retryFailedStep', () => { }); await recorder.promise(); } catch (e) { - recorder.catchWithoutStop((err) => err); + await recorder.catchWithoutStop((err) => err); } // expects to retry only once