歡迎使用 Chai

我們很高興您決定試用 Chai.js!如果這是您第一次造訪,請先熟悉基本知識,例如安裝和我們提供的斷言樣式。

基本知識

建立外掛

在您對 Chai 中包含的內容有紮實的瞭解之後,下一步是學習如何透過外掛擴充 Chai。Chai 比內建功能強大得多,僅受您想要實現的目標限制。外掛 API 也旨在透過提供使用者一種封裝常用斷言以供重複使用的方式,來簡化測試。

在外掛中公開全域變數

建立 Chai 外掛時,可以公開可在多個檔案中使用的全域變數。以下是如何以可持續的方式執行此操作

良好實踐

建議將任何全域變數匯出到模組記錄中,以便可以直接匯入,而不是將其新增為 chai 物件中的屬性

// An example of a good plugin:

export const myGlobal = {...};

export default function myPlugin(chai, utils) {
}

潛在問題

避免僅透過 chai.use() 公開全域變數,而不使其可匯入,因為這可能會在嘗試跨多個檔案使用全域變數時導致問題

// An example of a plugin which may have issues:

const myGlobal = {...};

export default function myPlugin(chai, utils) {
  chai.myGlobal = myGlobal;
}
// Another example of a plugin which may have issues:

export default function myPlugin(chai, utils) {
  chai.myGlobal = {...};
}

防止多次呼叫 use(..)

在某些情況下,use(..) 函式可能會多次呼叫您的外掛。對於許多外掛來說,這不會有問題,但最好檢查外掛是否已應用。

以下是一個您可以在外掛中實作檢查的虛構範例,但實際實作留給外掛作者。

import * as chai from 'chai';

let overwritten = false;

function somePlugin(base) {
  if (!overwritten) {
    base.util.overwriteMethod(base.Assertion.prototype, "equal", function (_super) {
      return function(...args) {
        console.log("Called!"); // log something out

        return _super.call(this, ...args);
      };
    });
    overwritten = true;
  }
}

chai.use(somePlugin);
chai.use(somePlugin);

chai.expect(123).to.equal(123); // Logs `Called!` only once

透過遵循這些指南,您可以建立易於使用和維護的 Chai 外掛。