有没有办法捕获 js 错误但不会因为它们而导致 testcafe 测试失败?

Is there a way to capture js errors but not fail testcafe tests because of them?

我目前正在开始编写一些 TestCafe 测试,并且在我们的网站上遇到了一个问题,同时 运行对它们进行调试 - 控制台中的 JS 错误导致测试失败。自然地,我很高兴我的测试发现了这一点,但这意味着即使发生低优先级且不直接影响任何用户的 JS 错误,我们的测试也可能会失败并阻止构建。

现在这可能是一些人想要的工作流程,但对我们来说,我们宁愿提出问题并在并行工作流程中解决它,而不是因为 JS 错误而阻止所有人。我知道 --skip-js-errors 选项,但这只是完全消除了所有错误。是否有中间立场,比如将错误转换为警告,或者只是添加某种测试后功能来记录测试期间发生的任何 JS 错误 运行?我试过像这样向我的固定装置添加 afterEach

.afterEach(async t => {
  const { error } = await t.getBrowserConsoleMessages();

  console.log(JSON.stringify(error));
});

但是对于 --skip-js-errors 这没有任何作用。请给我一些建议!

我的目标,以防万一 - 我想 查看 我的 TestCafe 运行 中可能的 JS 错误,以便我可以记录它们并进行他们的门票,但我不希望他们无法通过测试 运行。

TestCafe 不提供开箱即用的此类功能。正如您正确提到的那样,--skip-js-errors 标志会忽略所有错误并且不会记录它们。

但是,您可以使用脚本注入机制实现所需的功能。详情请参考以下文章:https://devexpress.github.io/testcafe/documentation/using-testcafe/common-concepts/inject-scripts-into-tested-pages.html#inject-script-code

我建议您继续使用 --skip-js-errors 标志并添加自定义 window.onerror 处理程序。请看例子:

fixture `fixture`
    .page `../pages/index.html`;

test.clientScripts({
    content: `
        window.addEventListener('error', function (e) {
            console.error(e.message); 
        });`
})(`Skip error but log it`, async t => {
    console.log(await t.getBrowserConsoleMessages());
});

在此代码中,我添加了 error 事件处理程序。在处理程序中,我调用了 console.error 方法。在这种情况下,t.getBrowserConsoleMessages 将 return 正确的错误日志。

请将此方法与 --skip-js-error 标志一起使用。 因此,命令将如下所示:testcafe chrome test.js --skip-js-errors.