Skip to content

Instantly share code, notes, and snippets.

@imaya
Created February 21, 2013 02:36
Show Gist options
  • Save imaya/5001531 to your computer and use it in GitHub Desktop.
Save imaya/5001531 to your computer and use it in GitHub Desktop.
zlib.js における BusterJS のテスト(メモ)

zlib.js における BusterJS のテスト

Minify した JS と、Minify する前の JS のテストを分ける

Minify した JS はコンパイル時の最適化によってコードパスが変更されていることがあります。 テストによっては正しいコードパスで実行されているか確認したいこともあるので、そのようなテストは Minify する前の JS で行います。

Minify しても export されているようなメソッドなどのテストは、どちらでも実行できるはずですので両方で実行するようにします。

コードパスをテストする

コードパスをテストする場合、Minify する前のファイルをテストすることになります。 そういった場合、複数のファイルを扱うことになることが多いのですが、Closure Library の Minify する前の依存関係解決は document.headscript を挿入する形式なのでそのままでは動きません。 そこで、以下のような対策をすることで簡単にテストすることができます。

base.js と deps.js の読み込み

Closure Library では goog.require()goog.provide()goog.inherits() などの重要な機能は base.js というファイルで定義されています。 私は Closure Library のこの機能しか使わない場合は、 closure-primitives というディレクトリに base.js を depswriter.py などのスクリプトと一緒にコピーして、余計なファイルをリポジトリにおかないようにしています。 また、依存関係を解決する deps.js も予め生成しておき、それも読み込むようにします。

libs: [
    "closure-primitives/base.js",
    "deps.js"
]

resources で依存関係に含まれているファイルを読み込めるようにしておく

あとは読み込まれる可能性のあるファイルをすべてテスト中に読み込めるようにしておきます。

resources: [
    "src/**/*.js"
]

全てのファイルを読み込む

すべての依存関係は goog.dependencies_.nameToPath に入っているので、これを利用して goog.provide() されたすべてのファイルを正しい順序で goog.require() します。 ただし、private なプロパティへアクセスしているので、今後の変更でもしかしたら使用できなくなるかもしれません。

(function() {
  for (var key in goog.dependencies_.nameToPath) {
    goog.require(key);
  }
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment