升級到 Jasmine 5.0
概觀
大多數使用者都可以在不變更任何內容的情況下升級到 Jasmine 5.0。但是,它確實包含一些會影響某些使用者的重大變更。遵循本指南中的建議,將能讓你獲得最順暢的升級體驗。
Jasmine 5.0 中的重大變更包括在 Windows 上處理檔案路徑樣式中反斜線的方式,Env#execute
的呼叫方式,Node-based 程式庫啟動 Jasmine-core 的方式,以及系統需求。你可以在 jasmine-core
和 jasmine
的版本說明中找到重大變更的完整清單。
建議所有使用者升級到最新的 4.x 版本,並在升級到 5.0 之前解決所有錯誤或廢棄警告。特別是,在 Windows 上使用 jasmine
套件的人應先升級至至少 4.5.0,因為該版本新增了一個會影響 Windows 使用者的重大廢棄警告。出於相同原因,在 Windows 上使用 jasmine-browser-runner
套件的人應先將其升級至至少 1.3.0,再升級至 2.0。
Jasmine 5.0 中引入的新平行執行模式對規範和報告程式的撰寫方式有其他限制。這些限制僅適用於在平行模式下執行 Jasmine。請參閱 平行執行指南 以取得詳細資料。
內容
- 系統需求
- 升級 jasmine-browser-runner
- 變更 Windows 上的反斜線處理方式
- 支援平行執行
- 變更瀏覽器中的整體錯誤處理
- 變更
Env#execute
- 移除
node_boot.js
系統需求
下列先前支援的環境不再支援:
- Node <18
- Safari 14
- Firefox 91
儘管 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-core
的 boot
函式,透過 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
版本中運作。