Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Cypress-如何正确检测页面中的JS错误_Javascript_Typescript_Cypress_Sinon_Sinon Chai - Fatal编程技术网

Javascript Cypress-如何正确检测页面中的JS错误

Javascript Cypress-如何正确检测页面中的JS错误,javascript,typescript,cypress,sinon,sinon-chai,Javascript,Typescript,Cypress,Sinon,Sinon Chai,我正在编写一个包含N个it的spec文件,其中每个it将访问应用程序的特定页面,并返回应用程序中的错误/警告数量 我也在这里发布了: 提供的解决方案似乎不起作用: it('should spy window.error', () => { cy.visit('https://www.spiegel.de/', { onBeforeLoad(win) { cy.spy(win.console, 'error').as('spyWinConsoleError');

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

我也在这里发布了:

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

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');
});

有什么想法吗?

有几件事需要注意

  • Cypress测试中有两个窗口对象,一个运行测试,另一个运行应用程序。您对
    控制台的调用。错误('questoe error')
    是第一个,但您的间谍在第二个

  • 测试代码的运行速度比Cypress命令快,因此
    console.error('questoe error')
    cy.visit()完成之前运行

这些例子都有效

监视runner窗口控制台

it('应该监视运行程序窗口。错误',()=>{
cy.spy(window.console,'error').as('spyware'error');
控制台错误('questoe error')
cy.get('@spywconsolererror')。应该('be.calledOnce');
});
监视应用程序窗口控制台

it('应该监视应用程序窗口。错误',()=>{
const win=cy.state(“窗口”)
cy.spy(win.console,'error')。as('spyware'error');
win.console.error('questoe error')
cy.get('@spywconsolererror')。应该('be.calledOnce');
});
捕获实际应用程序错误

it('should spy window.error',()=>{
cy.visit(“../app/spy on win error.html”{
加载前加载(win){
cy.spy(win.console,'error')。as('spyware'error');
},
})
cy.get('@spywincoleerror')。应该('be.calledWith','from-app');
});

对于单元测试来说,这似乎是一个更好的例子。为什么需要在浏览器上测试它?你能发布错误吗?错误显示在我共享的github问题页面上。我们想在真正的浏览器上测试这一点。
<body>
  <script>
    setTimeout(() => {
      console.error('from app')
    }, 1000)
  </script>
</body>