Cypress如何仅跳过指定测试用例的全局afterEach函数执行
可行实现方案
无需为每个用例单独编写afterEach钩子,以下两种方案都可以满足需求:
方案1:基于用例标题判断(改动最小)
直接在现有全局afterEach钩子中增加判断逻辑,跳过指定名称的用例校验即可:
describe('AutoLogin Test Case',function(){ beforeEach(function(){ Cypress.Cookies.preserveOnce('_session_id') }) afterEach(function(){ // 仅非登录用例执行ajax状态校验 if(this.currentTest.title !== 'input login info') { cy.get('[id="ajax_working"]',{timeout:6000}).should('not.be.visible') } }) it('input login info',function(){ cy.visit('https://***********.******.com/') cy.get('[id^=user_username]') .type('ChrisPbacon').should('have.value','ChrisPbacon') cy.get('[id^=user_password]') .type('welcome123').should('have.value','welcome123') cy.contains('Sign In Now').click() }) // 其余测试用例无需改动 // it('其他用例1', function() { ... }) // it('其他用例2', function() { ... }) })
方案2:自定义用例元标记(扩展性更强)
如果后续可能有更多用例需要跳过该校验,推荐使用自定义用例配置标记的方案,避免硬编码标题带来的维护风险:
- 首先给需要跳过校验的用例增加自定义配置项:
it('input login info', { skipAjaxCheck: true }, function(){ cy.visit('https://***********.******.com/') cy.get('[id^=user_username]') .type('ChrisPbacon').should('have.value','ChrisPbacon') cy.get('[id^=user_password]') .type('welcome123').should('have.value','welcome123') cy.contains('Sign In Now').click() })
- 调整afterEach钩子的判断逻辑:
afterEach(function(){ // 仅未标记跳过的用例执行校验 if(!Cypress.currentTest.config('skipAjaxCheck')) { cy.get('[id="ajax_working"]',{timeout:6000}).should('not.be.visible') } })
后续有其他需要跳过该校验的用例,只需给对应it配置添加skipAjaxCheck: true即可,无需修改afterEach逻辑。
内容的提问来源于stack exchange,提问作者Bruno Rodriguez
相关产品推荐
相关产品推荐

