Chrome拡張開発のユニットテスト事情

ちょっと前から検索しているけど、あんまりこの話題活発ではない。FirefoxOperaのAdd-onsやExtensionsはどんな感じなんでしょうか。 おおまかに以下の2パターンのアプローチがある。

(1) Chrome拡張独自のAPIをモック化してブラウザやコマンドラインから独立したテストを実行できるようにする

Testing Chrome Extensions with Jasmine - Roberto Soares

  • Chrome Extension API のモック化+jasmine-spyでテスト
  • require.js を使ってbackgroundscriptやcontentscriptをテスト時に動的に読み込む。
  • chrome.extention 以下をモック化しているのでテストがブラウザに依存しなく実行できる(コマンドライン、CI)

ソースコード: gist-io-chrome/spec at master · roberto/gist-io-chrome

(2) ブラウザ上で実行できるテストフレームワークChrome拡張のサンドボックス内にすべて含めて、拡張機能の内部URLにブラウザからアクセスしテストランナーを実行する

Browser Testing as a Chrome Extension · Adrian Unger

ソースコードstaydecent/jasmine-chrome-extension

あとはてなブックマーク拡張がQUnitでテスト書いてあって参考になる https://github.com/hatena/hatena-bookmark-googlechrome-extension

所感

(1)の方が可用性の観点から好みなんだけど(2)のが本番に近いし手軽。(1)を志向しつつ妥協するところは(2)及び手動というのが現実解かなあと感じた。

またyeomanでChromeAppsがサポートされているらしい(http://yeoman.io/gettingstarted.html )ので見てみた。mocha+chai+phantomjs あたりのテスト環境が一発で生成されるんだけどChrome拡張API独自のサポートとかはないかんじ。

その他の参考になる情報

Chrome Extension開発を勉強してみる (15) - QUnitでChrome拡張の単体テスト - - kinjou_j (転職中?)のメモログ