如何使用Intern报告在测试执行期间发生的JavaScript错误?基本上,如果页面上有任何JavaScript错误(即使是未明确测试的部分内容),我想知道。
背景
我刚刚开始使用Intern并进行测试,我正试图在所有浏览器中测试我网站上的所有主要页面,因为我只是通过require.js更改了所有JavaScript。虽然它在Chrome中看起来不错,但过去我遇到过require.js和随机浏览器的问题,所以我想自动化一切。最可能出现的问题是,由于异步加载和预期全局的加载,某些随机JS将无法执行。由于目前没有设置测试,我基本上想要开始运行'测试'来浏览所有主要页面并报告任何JavaScript错误。
答案 0 :(得分: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已经尝试自动捕获任何未处理的错误,并将它们视为停止系统的致命错误(因为您永远不会有生成此类未处理错误的代码)。