diff --git a/packages/driver/cypress/e2e/commands/assertions.cy.js b/packages/driver/cypress/e2e/commands/assertions.cy.js index 7f8b7a69d215..7e6d62e59724 100644 --- a/packages/driver/cypress/e2e/commands/assertions.cy.js +++ b/packages/driver/cypress/e2e/commands/assertions.cy.js @@ -329,11 +329,15 @@ describe('src/cy/commands/assertions', () => { it('resolves eventually not exist', () => { const button = cy.$$('button:first') - cy.on('command:retry', _.after(2, _.once(() => { + cy.on('command:retry', _.after(3, _.once(() => { button.remove() }))) cy.get('button:first').click().should('not.exist') + + cy.then(function () { + assertLogLength(this.logs, 3) + }) }) it('resolves all 3 assertions', (done) => { diff --git a/packages/driver/src/cy/commands/asserting.ts b/packages/driver/src/cy/commands/asserting.ts index c18da3b63e8a..e5ce22f98a92 100644 --- a/packages/driver/src/cy/commands/asserting.ts +++ b/packages/driver/src/cy/commands/asserting.ts @@ -97,18 +97,18 @@ export default function (Commands, Cypress, cy, state) { const applyChainer = function (memo, value) { logIndex++ - if (value === lastChainer && !isCheckingExistence) { + cy.state('onBeforeLog', (log) => { + log.set('command', command) + log.set('commandLogId', `${assertionIndex}-${logIndex}`) + }) + + try { + if (value === lastChainer && !isCheckingExistence) { // https://github.com/cypress-io/cypress/issues/16006 // Referring some commands like 'visible' triggers assert function in chai_jquery.js // It creates duplicated messages and confuses users. - const cmd = memo[value] - - cy.state('onBeforeLog', (log) => { - log.set('command', command) - log.set('commandLogId', `${assertionIndex}-${logIndex}`) - }) + const cmd = memo[value] - try { if (_.isFunction(cmd)) { try { return cmd.apply(memo, args) @@ -126,11 +126,11 @@ export default function (Commands, Cypress, cy, state) { } else { return cmd } - } finally { - cy.state('onBeforeLog', undefined) + } else { + return memo[value] } - } else { - return memo[value] + } finally { + cy.state('onBeforeLog', undefined) } }