升級到 Jasmine 5.0

概觀

大多數使用者都可以在不變更任何內容的情況下升級到 Jasmine 5.0。但是,它確實包含一些會影響某些使用者的重大變更。遵循本指南中的建議,將能讓你獲得最順暢的升級體驗。

Jasmine 5.0 中的重大變更包括在 Windows 上處理檔案路徑樣式中反斜線的方式,Env#execute 的呼叫方式,Node-based 程式庫啟動 Jasmine-core 的方式,以及系統需求。你可以在 jasmine-corejasmine 的版本說明中找到重大變更的完整清單。

建議所有使用者升級到最新的 4.x 版本,並在升級到 5.0 之前解決所有錯誤或廢棄警告。特別是,在 Windows 上使用 jasmine 套件的人應先升級至至少 4.5.0,因為該版本新增了一個會影響 Windows 使用者的重大廢棄警告。出於相同原因,在 Windows 上使用 jasmine-browser-runner 套件的人應先將其升級至至少 1.3.0,再升級至 2.0。

Jasmine 5.0 中引入的新平行執行模式對規範和報告程式的撰寫方式有其他限制。這些限制僅適用於在平行模式下執行 Jasmine。請參閱 平行執行指南 以取得詳細資料。

內容

  1. 系統需求
  2. 升級 jasmine-browser-runner
  3. 變更 Windows 上的反斜線處理方式
  4. 支援平行執行
  5. 變更瀏覽器中的整體錯誤處理
  6. 變更 Env#execute
  7. 移除 node_boot.js

系統需求

下列先前支援的環境不再支援:

儘管 Jasmine 5.0 仍可能在某些這些環境中執行,但我們不再針對它們進行測試,而且不會嘗試在未來的 5.x 版本中維持它們的相容性。

升級 jasmine-browser-runner

如果你正在使用 jasmine-browser-runner,請升級至版本 2.0。你的套件管理員(npm/yarn 等)應自動安裝 jasmine-core 5.0 或更新版本,除非你的 package.json 指定較舊的版本。

變更 Windows 上的反斜線處理方式

過去,檔案路徑樣式中反斜線(例如 spec_files 組態屬性)在 Windows 上被視為目錄分隔符號,而在其他作業系統中被視為跳脫序列的開頭。從 jasmine 5.0 和 jasmine-browser-runner 2.0 開始,它們在所有作業系統中都被視為跳脫序列的開頭。此變更使 Jasmine 組態檔更容易移植,並確保 Windows 使用者可以指定恰好符合特殊 glob 語法的檔名。請參閱 glob 套件的 變更記錄README 以取得更多資訊。

反斜線相關的不建議使用警告已新增至 jasmine 4.6.0 和 jasmine-browser-runner 1.3.0。Windows 使用者應升級至這些版本或更新版本,並在升級至 jasmine 5.x 或 jasmine-browser-runner 2.x 之前,解決所有不建議使用的警告。

支援平行執行

5.0 中最大的變更,是透過 jasmine 套件,支援 Parallel 執行於 Node.js。Parallel 執行,對於測試組和報告者均施加了一些限制,因此並非所有使用者都可進行變更,而立即採用它。如需更多資訊,請參閱 平行執行測試

變更瀏覽器中的整體錯誤處理

Jasmine 之前的版本透過安裝 window.onerror 處理常式,偵測瀏覽器中未處理的例外和未處理的 Promise 拒絕。5.0 及後續版本改用 addEventListener。這表示 Jasmine 將不再覆寫任何在啟動前,由您的程式碼安裝的錯誤處理常式。這也表示您無法再透過設定 window.onerror,來覆寫 Jasmine 的全域錯誤處理。如果您需要覆寫 Jasmine 的全域錯誤處理,請使用 spyOnGlobalErrors

使用 addEventListener 可讓 Jasmine 在許多情況下,提供更好的錯誤資訊。不過,某些瀏覽器會限制提供給錯誤監聽器的資訊,這是因為錯誤來源已自 file:// URL 載入。如果您使用獨立發行版,如果您透過網路伺服器載入 Jasmine,便能更輕鬆地偵錯未處理的例外和 Promise 拒絕。執行這項操作的一個簡單方法,就是自包含 SpecRunner.html 的目錄中,執行 npx serve

變更 Env#execute

Jasmine 5.0 完成將 Env#execute 轉移至 async/await。大多數使用者不需要理會這項變更,因為他們不會直接呼叫 Env#execute,或以「發射並遺忘」的方式使用它。不過,任何傳遞回呼至 Env#execute 或從其中擷取例外的使用者,可能需要進行變更。

之前

try {
    env.execute(null, function () {
        // Handle completion
    });
} catch (e) {
    // Handle failures to start
}

之後

try {
    const jasmineDoneInfo = await env.execute();
} catch (e) {
    // Handle failures to start, which are now delivered via promise rejection
    // rather than synchronous throw
}

函式庫作者注意事項

「之後」的格式適用於 jasmine-core 4.0.0 及後續版本,或 3.9.0 及後續版本(如果您忽略宣告為 Promise 的值)。

移除 node_boot.js

這項變更主要影響 Node.js 中封裝 jasmine-core 的函式庫作者,而非一般使用者。在 5.0 之前,用於在 Node 中初始化 jasmine-coreboot 函式,透過 jasmine-core/node_boot.js 提供,也會匯出至 jasmine-core 模組本身。node_boot.js 已不存在於 5.0 中。

之前

const boot = require('jasmine-core/node_boot.js');

之後

const boot = require('jasmine-core').boot;

「之後」的版本應能在所有支援 Node.js 的 jasmine-core 版本中運作。