天天看點

如何在 Cypress 測試代碼中屏蔽(Suppress)來自應用代碼報出的錯誤消息

當我試圖使用 Cypress 對 SAP 官網進行自動化操作時,遇到如下的錯誤消息:

The following error originated from your application code, not from Cypress.
top.$ is not a function

When Cypress detects uncaught errors originating from your application it will automatically fail the current test.

This behavior is configurable, and you can choose to turn this off by listening to the uncaught:exception event.
如何在 Cypress 測試代碼中屏蔽(Suppress)來自應用代碼報出的錯誤消息

大意是,top.$ is not a function 這條錯誤消息,是 SAP 官網 www.sap.com 報出來的,而非 Cypress 本身。對于此類情況,一種選擇是,我們可以在 Cypress 測試代碼裡通過異常捕獲的方式,來忽略此類應用異常。

如何在 Cypress 測試代碼中屏蔽(Suppress)來自應用代碼報出的錯誤消息
On a technical note, Cypress considers uncaught exceptions to be any error that is uncaught by your application, whether they are "standard" errors or unhandled promise rejections. If the error triggers the window's global error handler or its unhandledrejection handler, Cypress will detect it and fail the test.

需要強調的是,如果應用程式抛出的異常,最終觸發了 windows 全局錯誤處理器( global error handler ) 或者其 unhandledrejection handler,則 Cypress 同樣會監測到此情況,并且以失敗狀态終止其測試。

在 Cypress 裡禁掉應用程式錯誤消息的完整代碼:

/// <reference types="Cypress" />

describe('My First Test', () => {
    it('finds the content "type"', () => {
      cy.visit('https://www.sap.com');
  
      cy.url().should('include', 'index.html');
      /*
  
      cy.contains('type').click();
  
      cy.url().should('include', '/commands/actions');
  
      cy.get('.action-email')
        .type('[email protected]')
        .should('have.value', '[email protected]');
        */
    });
  });

  Cypress.on('uncaught:exception', (err, runnable) => {
    // returning false here prevents Cypress from
    // failing the test
    console.log('Jerry errors!');
    return false
  })
           

最後的效果: