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プラグインを作成できます。