2

如何使用Intern报告测试执行期间发生的 JavaScript 错误?基本上,如果页面上有任何 JavaScript 错误(即使是未明确测试的部分)我想知道。

背景

我刚刚开始实习并进行一般测试,我正在尝试在所有浏览器中测试我网站上的所有主要页面,因为我刚刚将所有 JavaScript 更改为通过 require.js 加载。虽然它在 Chrome 中看起来不错,但我过去曾遇到过 require.js 和随机浏览器的问题,所以我想自动化一切。最可能出现的问题是,由于异步加载和预期全局加载,一些随机 JS 将无法执行。由于没有当前的测试设置,我基本上想通过运行“测试”开始,遍历所有主要页面并报告任何 JavaScript 错误。

4

1 回答 1

3

为了报告未捕获的错误,您需要挂钩window.onerror页面的方法。这是可能的,但是页面加载需要在添加钩子之前完成,这意味着在页面加载之前/期间发生的任何错误(或在页面卸载时发生)根本无法被捕获和报告。这也意味着如果您执行移动到新页面的操作(如表单提交),您需要确保在执行导致导航的操作之前检索错误列表,并window.onerror在您到达后重新配置处理程序新页面。

要使用功能测试执行此类报告,您的测试最终会看起来像这样:

return this.remote
  .get('http://example.com')
  .execute(function () {
    window.__internErrors__ = [];
    window.onerror = function () {
      __internErrors__.push(Array.prototype.slice.call(arguments, 0));
    };
  })
  // ... interact with the page ...
  .execute(function () {
    return window.__internErrors__;
  })
  .then(function (errors) {
    // read `errors` array to get list of errors
  });

请注意(截至 2014 年 8 月)window.onerror除最新版本的 Chrome 之外的所有浏览器中的错误仅提供消息、脚本源、行号和(有时)列号,因此此信息仅用于说明“此操作导致错误,请手动执行以获取堆栈跟踪”。

在单元测试期间,Intern 已经尝试自动捕获任何未处理的错误并将它们视为导致系统停止的致命错误(因为您永远不应该有生成这种未处理错误的代码)。

于 2014-08-05T00:37:04.720 回答