簡體   English   中英

如何使用Intern在功能測試期間報告JavaScript錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM