並行執行規範

5.0.0 及更新版本支援在 Node.js 中執行並行運算。如果您符合以下所有條件,即可並行執行 Jasmine 規範。

使用並行模式

  1. 閱讀以下限制和錯誤清單,並確定清單中沒有任何項目適用於您。特別地,請確定您不必停用隨機化、指定隨機種子或指定自訂排序,才能讓您的套件可靠地執行。
  2. 設定 jasmine 相依項目為 5.0.0 或更新版本。
  3. --parallel=<n> 引數新增到 jasmine 命令,例如 jasmine --parallel=4 以在四個並行處理中執行規範。

理想的工作人員數量取決於您規範的性質以及可用 CPU 核心數量和類型。如果工作人員數量略低於核心數量,受 CPU 限制的套件通常能執行得最快。受 I/O 限制的套件可能會受益於較少的工作人員數量。

限制

以下限制僅適用於並行模式,而非正常順序執行模式。

新的全域設定/清除 API

Jasmine 5.0 提供新的 API,可確切執行一次全域設定和清除。其目的是支援需要異常程式設定的平行執行情境,且不論工人數量為何,都只會進行一旦設定。它也可以在預設的順序執行模式中使用。

如需使用全域設定/清除 API,請將 globalSetup 和/或 globalTeardown 函式加入 Jasmine 組態,例如:

module.exports = {
  spec_dir: "spec",
  // ...
  globalSetup() {
    // ... your setup code here
  }
  globalTeardown() {
    // ... your teardown code here
  }
}

如果宣告全域設定/清除函式為 async,或回傳承諾,Jasmine 會等到回傳的承諾解決後才會繼續執行。非同步回呼程式樣式不支援。

不確定該使用哪個設定/清除工具嗎?

應注意的差異

更新報表工具以便在平行模式中運作

平行模式對報表工具施加許多限制。由於某些最受歡迎的第三方報表工具需要進行一些變更才能在平行模式中運作,Jasmine 會假設報表工具與平行模式不相容,除非它宣告相容性。報表工具可透過公開 reporterCapabilities 屬性(其值為 {parallel: true}),宣告它與平行模式相容。

事件順序

必須注意的最大限制是,系統會根據從工作程序接收的順序傳送事件。這表示不相關的規格和套件的事件可能會穿插。如果某個報告程式假設 specDone 事件屬於最近收到的 specStarted 事件所屬的同一份規格,或者假設 suiteStartedsuiteDone 事件之間的所有事件都與該套件的子項目相關的話,則它將無法在並行模式中執行。Jasmine 僅會針對並行模式的事件順序提供下列保證:

在 Jasmine 4.6 和更新的版本中,套件和規格報告程式的事件都有一個 parentSuiteId 屬性,讓報告程式可以在不需要依賴於事件順序的情況下,找出規格或套件的母項套件。

並行事件發送

在循序模式中,Jasmine 會在繼續下一步之前,等待非同步的報告程式函式完成執行。在並行模式中則不會這樣做。非同步報告程式必須做好準備,以並行處理事件或在內部放到佇列中。

API 差異

此外,報告程式使用的多個 API 都不可用或受到限制:

請注意,以上狀況僅適用於並行模式。在預設的循序模式中,Jasmine 5 完全相容於現有的報告程式。

程式化使用方式

可以使用 ParallelRunner 類別,以程式化的方式並行執行規格。

const ParallelRunner = require('jasmine/parallel');
const runner = new ParallelRunner({numWorkers: 3});
runner.loadConfigFile('spec/support/jasmine.json');
runner.execute();

ParallelRunner 支援與 Jasmine 類別相同的多種方法。有關詳細資訊,請參閱 API 參考文件