挂钩后无法让赛普拉斯执行

Can't get Cypress to execute after hook

我正在尝试使用 after 挂钩删除我在我的测试套件中使用的东西,但该挂钩从未执行过。

describe("here I start the suite", function() {
    
  before(() => {
    cy.storeIDs();
  });

  after(() => {
    cy.removeIDs();
  });

  it("here I execute my tests", function() {
    cy.processFile();
  });

});   // end of describe

测试套件,包括 before hook(在所有测试之前执行一次)运行s 完美。不管我在 after 钩子里面写什么,我永远不会让它执行。
我知道赛普拉斯文档不建议使用 after hook 但在这种情况下我别无选择。关于为什么我无法将其发送到 运行 有什么想法吗?即使内部有 cy.log() 并且没有实际代码,它也不会到达 运行 :S

您参考了本节 Using after or afterEach hooks,建议在 before() 而不是 after()

中进行清理
before(() => {
  if (getIds()) {   // if needed check ids exist first
    cy.removeIDs()
  })
  cy.storeIDs()
})

但是,如果您仍想使用 after(),请注意异步命令仍将 运行 但 不会 cy.log( ).

例如,

Cypress.Commands.add('removeIds', () => {
  setTimeout(() => {
    console.log('cleanup')  // ✅ logs to dev console, so this has run
    cy.log('cleanup')     // ❌ does not log to Cypress log 
  }, 1000)
})

after(() => {
  cy.log('after - #1')  // ✅ logs to Cypress log 
  cy.removeIds()
})

要获得最后的 cy.log(),请尝试使用 .then()

Cypress.Commands.add('removeIds', () => {
  setTimeout(() => {
    console.log('cleanup')  // ✅ logs to dev console, so this has run
    cy.log('cleanup')     // ❌ does not log to Cypress log 
  }, 1000)
})

after(() => {
  cy.log('after - #1')  // ✅ logs to Cypress log 
  cy.removeIds().then(() => {
    cy.log('after - #2')  // ✅ logs to Cypress log, 
                          // ❢ but occurs before cy.removeIds() completes
  })
})

或者cy.log()成功removeIds,return一个承诺

Cypress.Commands.add('removeIds', () => {
  return new Cypress.Promise((resolve, reject) => {
    setTimeout(() => {
      resolve('ids removed')
    }, 1000)
  })
})

after(() => {
  cy.removeIds().then(msg => {
    cy.log(msg)  // ✅ logs 'ids removed' to Cypress log
  })
})