【问题标题】:Cypress - how to properly detect for JS errors in a page赛普拉斯 - 如何正确检测页面中的 JS 错误
【发布时间】:2021-05-15 04:52:22
【问题描述】:

我正在编写一个包含 N 个它的规范文件,其中每个它将访问应用程序的特定页面并返回应用程序中的错误/警告数。

我也在这里发帖:https://github.com/cypress-io/cypress/issues/4808

提供的解决方案似乎不起作用:

it('should spy window.error', () => {
  cy.visit('https://www.spiegel.de/', {
    onBeforeLoad(win) {
      cy.spy(win.console, 'error').as('spyWinConsoleError');
      cy.spy(win.console, 'warn').as('spyWinConsoleWarn');
    },
  })
  console.error('questo e errore')
  cy.get('@spyWinConsoleError').should('be.calledOnce');
});

有什么想法吗?

【问题讨论】:

  • 这对于单元测试来说似乎是一个更好的例子。为什么需要在浏览器上进行测试?你能发布错误吗?
  • 错误显示在我分享的github问题页面上。 github.com/cypress-io/cypress/issues/… 我们想在真实的浏览器上进行测试。

标签: javascript typescript cypress sinon sinon-chai


【解决方案1】:

有几点需要注意,

  • 赛普拉斯测试中有两个窗口对象,一个是运行测试的窗口对象,一个是运行应用程序的窗口对象。您对 console.error('questo e errore') 的调用是对第一个对象的调用,但您的间谍是对第二个对象的调用。

  • 测试代码比 Cypress 命令运行得更快,所以 console.error('questo e errore') 在 cy.visit() 完成之前运行。

这些例子都有效,

监视运行器窗口控制台

it('should spy on RUNNER window.error', () => {
  cy.spy(window.console, 'error').as('spyWinConsoleError');
  console.error('questo e errore')
  cy.get('@spyWinConsoleError').should('be.calledOnce');
});

监视应用窗口控制台

it('should spy on APP window.error', () => {
  const win = cy.state('window')
  cy.spy(win.console, 'error').as('spyWinConsoleError');
  
  win.console.error('questo e errore')
  cy.get('@spyWinConsoleError').should('be.calledOnce');
});

捕捉实际的应用错误

it('should spy window.error', () => {
  cy.visit('../app/spy-on-win-error.html', {
    onBeforeLoad(win) {
      cy.spy(win.console, 'error').as('spyWinConsoleError');
    },
  })
  cy.get('@spyWinConsoleError').should('be.calledWith', 'from app');
});
<body>
  <script>
    setTimeout(() => {
      console.error('from app')
    }, 1000)
  </script>
</body>

等待 spiegel.de 加载

it('should spy window.error', () => {

  cy.visit('https://www.spiegel.de/', {
    onBeforeLoad(win) {
      cy.spy(win.console, 'error').as('spyWinConsoleError');
      win.console.error("questo è l'errore due");      // call here after spy is set
    },
  })

  cy.get('@spyWinConsoleError')
    .should('be.calledOnce');
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 2018-11-02
    相关资源
    最近更新 更多