カスタムブート

jasmine環境をカスタマイズしたい場合は、boot.jsファイルをカスタマイズできます。

boot.jsの中核はそのままにして、インターフェイスに新しいもの追加したり、このファイルを編集することで設定を構成したりできます。

(function() {

  window.jasmine = jasmineRequire.core(jasmineRequire);

  jasmineRequire.html(jasmine);

  var env = jasmine.getEnv();

インターフェイスのカスタマイズ

jasmineのコアインターフェイスがロードされたら、新しい関数を追加したり、既存関数を書き換えたりできます。

  var jasmineInterface = jasmineRequire.interface(jasmine, env);

ここで、以下のエイリアスを追加して、beforebeforeEachと同じにし

  jasmineInterface.before = jasmineInterface.beforeEach;

afterafterEachと同じにし

  jasmineInterface.after = jasmineInterface.afterEach;

contextdescribeと同じにします。

  jasmineInterface.context = jasmineInterface.describe;

  if (typeof window == "undefined" && typeof exports == "object") {
    extend(exports, jasmineInterface);
  } else {
    extend(window, jasmineInterface);
  }

カスタムレポーターの追加

jsApiReporterhtmlReporterの追加、またはそれらに代わる形で独自レポーターを追加できます。

  env.addReporter(jasmineInterface.jsApiReporter);

env.specFilter関数を変更して、現在のランから仕様をフィルタリングする方法をカスタマイズすることもできます。

または、テストの解析後、スイートIDまたは仕様IDの配列をexecute関数に渡すことで、実行する仕様を指定することもできます。これらのIDは、env.topSuite()を介してアクセスできる、解析済みテストのツリーを走査することで取得できます。

  var specFilter = new jasmine.HtmlSpecFilter({
    filterString: function() { return queryString.getParam("spec"); }
  });

  env.specFilter = function(spec) {
    return specFilter.matches(spec.getFullName());
  };

  window.setTimeout = window.setTimeout;
  window.setInterval = window.setInterval;
  window.clearTimeout = window.clearTimeout;
  window.clearInterval = window.clearInterval;

既定では、ブラウザでonloadイベントがトリガーされるとjasmineは実行を開始します。executeを呼び出す前に他の何かを待機する場合は、この部分を置き換えます。

  var currentWindowOnload = window.onload;

  window.onload = function() {
    if (currentWindowOnload) {
      currentWindowOnload();
    }
    env.execute(env.topSuite().id);
  };

jasmine公開インターフェイスを正しいオブジェクトに追加するためのヘルパー関数です。

  function extend(destination, source) {
    for (var property in source) destination[property] = source[property];
    return destination;
  }

}());