Jar*_*b22 4 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));
});
Run Code Online (Sandbox Code Playgroud)
但--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());
});
Run Code Online (Sandbox Code Playgroud)
在此代码中,我添加了error
事件处理程序。在处理程序内部,我调用该console.error
方法。在这种情况下,t.getBrowserConsoleMessages
将返回正确的错误日志。
请将此方法与--skip-js-error
标志一起使用。因此,命令如下:testcafe chrome test.js --skip-js-errors
。
归档时间: |
|
查看次数: |
4315 次 |
最近记录: |