赛普拉斯 - 如何正确检测页面中的 JS 错误
Cypress - how to properly detect for JS errors in a page
我正在编写一个包含 N 个 it(s) 的 spec 文件,其中每个它将访问应用程序的特定页面,并将 return 中 errors/warning 的数量应用程序。
我也在这里发帖: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');
});
有什么想法吗?
有几点需要注意,
Cypress 测试中有两个 window 对象,测试运行的对象和应用程序运行的对象。您对 console.error('questo e errore')
的调用是第一个, 但你的间谍在第二位。
测试代码运行速度比 Cypress 命令快,因此 console.error('questo e errore')
在 cy.visit()
完成之前是 运行。
这些例子都有效,
监视运行器window控制台
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');
});
监视应用 window 控制台
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');
});
我正在编写一个包含 N 个 it(s) 的 spec 文件,其中每个它将访问应用程序的特定页面,并将 return 中 errors/warning 的数量应用程序。
我也在这里发帖: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');
});
有什么想法吗?
有几点需要注意,
Cypress 测试中有两个 window 对象,测试运行的对象和应用程序运行的对象。您对
console.error('questo e errore')
的调用是第一个, 但你的间谍在第二位。测试代码运行速度比 Cypress 命令快,因此
console.error('questo e errore')
在cy.visit()
完成之前是 运行。
这些例子都有效,
监视运行器window控制台
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');
});
监视应用 window 控制台
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');
});