有没有一种方法可以捕获js错误,但不会因此而导致testcafe测试失败?

时间:2020-01-17 15:51:57

标签: javascript testing error-handling automated-tests testcafe

我目前正在开始编写一些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错误,以便我可以记录它们并为它们做票,但我不知道希望他们无法通过测试。

1 个答案:

答案 0 :(得分:4)

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将返回正确的错误日志。

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