[英]How to report JavaScript errors during functional tests using Intern?
如何報告使用Intern執行測試期間發生的JavaScript錯誤? 基本上,我想知道頁面上是否有JavaScript錯誤(甚至是未經過明確測試的部分錯誤)。
背景
我剛開始使用Intern並進行了總體測試,並且嘗試在所有瀏覽器中測試網站上的所有主要頁面,因為我只是更改了所有JavaScript,以通過require.js進行加載。 盡管它在Chrome中看起來不錯,但過去我在require.js和隨機瀏覽器方面遇到了問題,因此我想使一切自動化。 最有可能出現的問題是,由於異步加載和預期全局變量的加載,某些隨機JS將無法執行。 由於沒有當前的測試設置,我基本上想從所有主要頁面上運行“測試”開始,並報告所有JavaScript錯誤。
為了報告未捕獲的錯誤,您需要掛鈎頁面的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除外)僅提供消息,腳本源,行號和(有時)列號,因此,此信息僅對說“ this操作導致錯誤,請手動執行以獲取堆棧跟蹤”。
在單元測試期間,Intern已經嘗試自動捕獲任何未處理的錯誤,並將它們視為致命錯誤,從而使系統停止運行(因為您永遠不應該擁有生成此類未處理錯誤的代碼)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.