From d3fedcc0f7bacd137c4c1ee9a3066480db4051f8 Mon Sep 17 00:00:00 2001 From: Jakub Freisler Date: Thu, 3 Nov 2022 12:18:29 +0100 Subject: [PATCH] feat: support Cypress retries functionality closes #168 Signed-off-by: Jakub Freisler --- src/commands.ts | 7 +++++++ src/screenshotPath.utils.ts | 7 +++++++ src/task.hook.ts | 1 + 3 files changed, 15 insertions(+) diff --git a/src/commands.ts b/src/commands.ts index d189443c..effadbef 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -130,6 +130,12 @@ Cypress.Commands.add( matchAgainstPath, } = getConfig(options); + const currentRetryNumber = ( + cy as unknown as { state: (s: string) => { currentRetry: () => number } } + ) + .state("test") + .currentRetry(); + return cy .then(() => cy.task<{ screenshotPath: string; title: string }>( @@ -139,6 +145,7 @@ Cypress.Commands.add( options.title || Cypress.currentTest.titlePath.join(" "), imagesPath, specPath: Cypress.spec.relative, + currentRetryNumber, }, { log: false } ) diff --git a/src/screenshotPath.utils.ts b/src/screenshotPath.utils.ts index f308aed4..f0c33e85 100644 --- a/src/screenshotPath.utils.ts +++ b/src/screenshotPath.utils.ts @@ -13,10 +13,12 @@ export const generateScreenshotPath = ({ titleFromOptions, imagesPath, specPath, + currentRetryNumber, }: { titleFromOptions: string; imagesPath: string; specPath: string; + currentRetryNumber: number; }) => { const parsePathPartVariables = (pathPart: string, i: number) => { if (pathPart === PATH_VARIABLES.specPath) { @@ -40,6 +42,11 @@ export const generateScreenshotPath = ({ if (typeof nameCacheCounter[screenshotPath] === "undefined") { nameCacheCounter[screenshotPath] = -1; } + + // it's a retry of the same image, so let's decrease the counter + if (currentRetryNumber > 0) { + --nameCacheCounter[screenshotPath]; + } return path.join( IMAGE_SNAPSHOT_PREFIX, `${screenshotPath} #${++nameCacheCounter[screenshotPath]}${ diff --git a/src/task.hook.ts b/src/task.hook.ts index c974795a..64f4ccba 100644 --- a/src/task.hook.ts +++ b/src/task.hook.ts @@ -38,6 +38,7 @@ export const getScreenshotPathInfoTask = (cfg: { titleFromOptions: string; imagesPath: string; specPath: string; + currentRetryNumber: number; }) => { const screenshotPath = generateScreenshotPath(cfg);