为了报告未捕获的错误,您需要挂钩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 已经尝试自动捕获任何未处理的错误并将它们视为导致系统停止的致命错误(因为您永远不应该有生成这种未处理错误的代码)。