1

ファイル「mediator.js」には、「mediator」オブジェクトをグローバル名前空間に追加する即時関数があります。この「メディエータ」は、私たちが持っている唯一のグローバル オブジェクトです。

これで、「メディエーター」オブジェクトのさまざまな単体テストができました。そして、各テストを独立して実行する必要があります。つまり、各テストは、immediate 関数を呼び出して新しいクリーンなメディエーター オブジェクトを作成することから開始する必要があります。

テストは Jasmine で作成され、Chutzpah と JsTestDriver の両方で実行されます。

では、どうすればこれを行うことができますか?

  • Chutzpah では、個々のテストを独自の js ファイルに入れ、各テスト ファイルで mediator.js を参照することができました。
  • JsTestDriver を使用すると、テストごとに構成ファイルが必要になる可能性があります。このファイルには、mediator.js とテスト ファイルが含まれます。

また、即時パターンを放棄することも検討しており、Mediator オブジェクトを作成するコンストラクター関数を用意しています。本番コードでは、メディエーターを 1 回作成するだけで済み、グローバル名前空間を汚染するコンストラクター関数をぶらぶらさせたくないため、これは残念です。

確かに、即時/自己呼び出し/自己実行関数をテストするときに、他の人がこの問題に遭遇しました。では、「ベストプラクティス」とは何ですか?

4

1 に答える 1

2

メディエーター コンストラクターを公開し、各テストで既存のグローバル メンバーをオーバーライドすることが最善の選択肢であると思います。1 つのオブジェクト コンストラクターを公開すると、大きな問題になります。回避策は、メソッドで公開するよりもはるかに手間がかかるようです。

何かのようなもの:

// mediator.js

function createMediator(){ ... }

window.mediator = createMediator();



// In unit test

beforeEach(function () {
  window.mediator = createMediator();
});
于 2012-03-28T16:07:37.630 に答える