まじめなことを書くつもりでやっています。 適当なことは 「一角獣は夜に啼く」 に書いています。
この広告は、90日以上更新していないブログに表示しています。
これまでFirefox拡張機能のテストをどうやって書くのがいいかずっと悩んでいたのですが (悩みつつもQUnit を使ってテストを書いていました)、このあいだ MozMill というのを見つけて、使ってみたらなかなか良かったので紹介します。
MozMill はMozilla 製品 (Firefox やThunderbird などのGecko ベースのアプリケーション) の自動テストを書くためのテスティングフレームワークです。 MDN のドキュメントには拡張機能としてインストールすることも、コマンドラインツールとしてインストールすることもできると書かれていますが、拡張機能はMozilla Add-ons から削除されてしまっているようでした。
MozMill はFirefox 自体のテストにも使われているということですが、Firefox拡張機能のテストに使用することもできます。
MozMill のインストールからFirefox拡張機能のテストを実行するところまでの簡単な流れを説明します。
コマンドラインツールとしての MozMill をインストールします。Debian やUbuntu では、下記コマンドでインストールできます。 (システムにインストールされているPython を使用します。) pip コマンドはPython のパッケージ管理システムです。
$ sudo apt-get install python-pip python-dev$ sudo pip install mozmill mercurial
その他の OS の場合は MDN のドキュメントを見てください:コマンドライン版 MozMill のインストール方法
とりあえずFirefox拡張機能は関係なしに、単にJavaScript のテストを実行させてみます。
MozMill では、「test」 で始まる名前の関数がテストの関数だとみなされるようです。 なので、
function test_XXX(){// ...}
というような感じでファイル中に関数定義を書いていけばよいことになります。 とはいえ、他のテスティングフレームワークに書きかえる場合のことを考えると、テスト定義用の関数を作った方が良いでしょう。 (特に非同期処理のテストに関しては。)
var assertions ={};Cu.import("resource://mozmill/modules/assertions.js", assertions);// assert による値の検査を行うと、失敗時にはそれ以降の処理が行われないvar assert =new assertions.Assert();// expect による値の検査を行うと、失敗時もそれ以降の処理が行われるvar expect =new assertions.Expect();// --- テスト定義のための関数 ---//XXX 同じ名前のテストが定義されたら上書きされてしまうvar global =this;function defineTest(testName, testFunc){ global["test:" + testName] = testFunc;}function defineAsyncTest(testName, testFunc){ global["test:" + testName] =function (){var isDone =false;var callback =function (){return isDone}; testFunc(function (){ isDone =true}); assert.waitFor(callback);};}// --- テストの記述 ---defineTest("同期的なテスト",function (){ assert.ok(true,"good"); assert.equal("1","1","1 is 1"); assert.pass("good");});defineAsyncTest("非同期処理のテスト",function (done){var timer ={}; Components.utils.import("resource://gre/modules/Timer.jsm", timer); timer.setTimeout(function (){ expect.fail("not good"); expect.pass("good"); done();}, 1000);});
上のようなコードを書いて (test-example.js とする)、次のコマンドを実行するとテストが走ります。
$ mozmill --binary=$HOME/local/firefox-nightly/firefox --test=test-example.js
--binary
オプションはFirefox 本体のパス。--test
オプションは実行するテストファイル。
本記事公開後に saneyuki さんがFirefox 周りのテストの話についてつぶやかれていました。 Mochitest というのもあるんですね。
今、MozMillってどれくらい使われてたかなー。try chooserだと"Tb only"って書かれてるし。
— サーボ太郎 (@saneyuki_s)2013, 9月 29
FirefoxそのもののUI testは、Mochitest使ってる。https://t.co/5AbO3Bt7QC コードサンプル多いけど、アドオン用途には基本向かない。
— サーボ太郎 (@saneyuki_s)2013, 9月 29
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。