我想找到一种方法来调试testcafe
报告的JavaScript错误。在本地这不是一个大问题,我们可以在其中浏览浏览器的控制台并读取错误。在无头浏览器中的持续集成环境中,情况要复杂一些。
目前正在运行测试:
如上所述,测试始终在本地成功,并且无论它们在docker内部还是外部运行都无关紧要。问题是在circleci上运行的测试有时会失败。它们由于未捕获的JavaScript错误而失败,并且testcafe
报告如下错误:
<failure>
<![CDATA[
1) Uncaught exception:
Error:
Browser: HeadlessChrome 77.0.3865 / Linux 0.0.0
]]>
</failure>
没有堆栈跟踪,没有消息,没有信息,没有屏幕截图。真的很难调试,因为它仅发生在circleci环境中。
我试图使用testcafe
中的内置客户端代码注入来绑定到onerror
/ addEventListener('error')
中,例如此处的示例:#1,{{3 }}。不幸的是,没有任何报道。
此刻,我这边的日志记录机制看起来像这样
fixture('Profile - remove account')
.page(url('/sign-up'))
.beforeEach(resize)
.afterEach(async t => {
console.log(await t.getBrowserConsoleMessages());
});
test(`should:
▹ Sign up
▹ Visit /profile/account
▹ Remove current account
▹ Visit /login
`, async t => {
log.js
window.addEventListener('error', function (error) {
console.error('Got uncaught error');
console.error(error.message);
try {
console.error(JSON.stringify(error, undefined, 2));
catch (_) {
}
});
CLI
docker-compose run --rm e2e \
"chromium:headless --no-sandbox --disable-dev-shm-usage" \
tests/e2e/src \
--cs=tests/e2e/log.js \
--skip-js-errors \
-S -s /tests/screenshots \
-r xunit:/tests/test-results/testcafe/results.xml
已经多次报告此问题:
答案 0 :(得分:1)
我认为显示空错误堆栈的原因有两个:
click
,typeText
等)都不相关。 此错误在服务器端引发,因此window.addEventListener('error')
处理程序无助于查找问题的原因。
在开始测试之前,您需要通过以下方式记录Node.js错误:
export function registerErrorHandlers () {
process.on('unhandledRejection', e => console.error(e));
process.on('uncaughtException', e => console.error(e);
}
如果发现有问题的案例,请在GitHub的TestCafe存储库中的this问题中添加有关此问题的信息。