Chromeテスト

by 1 contributor:

導入

Chromeテストは基本的には、Chrome特権付きで動作するMochitestです。

Chromeテストスイートは、JavaScriptを用いてアプリケーションのChromeウィンドウをテストできるように設計された、自動テストフレームワークです。現在の所、JavaScriptのコードをFirefoxのメインのブラウザウィンドウと同じスコープで実行し、結果をMochitestテストフレームワークと同じ関数を使って報告することができます。ChromeテストスイートはMochitest frameworkからのruntests.pyに依存しています。

Chromeテストを実行する

Mochitestを実行するには、あなたが行った変更を含めてMozillaをビルドする必要があります。カレントディレクトリを $(OBJDIR)/_tests/testing/mochitest に移動して、以下のコマンドを実行してください:

python runtests.py --chrome

このコマンドは、あなたがビルドしたMozillaを起動した上で、「chrome tests」というウィンドウを開きます。「run all tests」リンクをクリックするとテストの実行が開始され、実行結果はそのウィンドウ内で報告されます。結果をファイルに出力するためのオプ ションも利用可能です。その場合は上記のコマンドに加えて、Mochitestで使用されるのと同じパラメータ(--log-file=/path/to /file)を指定してください。 (ログ出力はまだ動作しません。バグ 423497を参照してください。)

テストハーネス【訳注: テスト実行用プログラム】に対して、ユーザの手動操作無しで起動時にテストを自動実行するよう指示するには、パラメータとして --autorun オプションを指定します。テストを完全に自動化するために、このオプションと同時に --close-when-done オプションを指定する事もできます。

パスを --test-path パラメータで渡すことで、テストを一つだけ実行することもできます。例:

python runtests.py --chrome --test-path=toolkit/content/tests/chrome/test_largemenu.xul

この例はtest_largemenu.xulだけを実行します。

Chromeテストを書く

Chromeテストは基本的には、Chrome特権付きで動作する、すなわち、コードとUIが chrome:// URIで参照されるMochitestです。基本的なXULのテストファイルはこのようなものです:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>

<window title="テストのデモ"
        xmlns="http://www.mozilla.org/keymaster/gat...re.is.only.xul"
        onload="RunTest();">
  <title>テストのデモ</title>

  <script type="application/javascript" 
          src="chrome://mochikit/content/MochiKit/packed.js"/>
  <script type="application/javascript"
          src="chrome://mochikit/content/tests/Simp.../SimpleTest.js"/>

  <script type="application/javascript">
  <![CDATA[
    SimpleTest.waitForExplicitFinish();

    function RunTest()
    {
      ok  (true ==  1, "this passes");
      todo(true === 1, "this fails");
      SimpleTest.finish();
    }
  ]]>
  </script>

  <body xmlns="http://www.w3.org/1999/xhtml">
    <p id="display"></p>
    <div id="content" style="display: none"></div>
    <pre id="test"></pre>
  </body>
</window>

「RunTest」関数はテストハーネスではなく、テストのonloadイベントハンドラにより実行されます。

比較関数はMochitestsでサポートされているものと全く同じ物を使えます。詳細を知りたい場合は、Mochitestのドキュメントの比較関数がどのように動作するかを参照してください。 グローバルのスコープに定義された「EventUtils」オブジェクトから、EventUtilsヘルパ関数 を利用する事もできます。

テストスイートでは、Mochitestで用意されている関数と同じ名前の関数を使う事で、非同期のテストも実行することができます。RunTest()の実行が終わるまで待ってから実行結果の報告を受け取りたい場合、SimpleTest.waitForExplicitFinish()を呼んでください。テストが完了した後にはSimpleTest.finish()を呼びます。テストが完了するまであまりに長い時間がかかった場合、テストハーネスはそのテストをFAILED(失敗) と見なす事に留意してください(現在の所、タイムアウトまでの時間は15秒です)。

テスト内で投げられたあらゆる例外は、捕捉され、テストにおいて失敗として報告されます。テストの実行コンテキストの外で投げられた例外(タイムアウトした場合、イベントハンドラ内での例外など)は捕捉されませんが、タイムアウトしたテストについては、それらがfinish()の実行を妨げた場合は実行結果に おいて報告されます。

テストファイルの名前は「test_」で始まり、拡張子は「.xul」でなければなりません。このパターンに一致しないファイルはテスト実行環境によって無視されますが、それ以外の名前のXULファイルを置くこともできます。例えば、test_demo.xulからopenDialogによって開かれるXULウィンドウのファイルはwindow_demo.xulと名付けるとよいでしょう。「test_bug123456.xul」のように、バグの番号をファイル名に書く事が推奨されます。

新しいChromeテストをツリーに追加する

新しいChromeテストをツリーに追加するには、Browser chromeテストが _tests/testing/mochitest/mochitest ではなく _tests/testing /mochitest/chrome にコピーされるようにするということに留意しながら、Mochitestの説明に従ってください。

 

ドキュメントのタグと貢献者

Contributors to this page: Piro
最終更新者: Piro,