テストを実行する時に、複数用意したテストページを実行するごとにtestRunner.htmlからファイルを指定するのは時間と手間が掛かってしまい、 それでは自動化しているとは言えませんよね。
xUnitにはスイト (sweatではなくsuite、つまり「一そろいの」という意味。) という概念が用意されています。
考え方はシンプル。スイト専用のテストページを作成し、そこかにテストページを複数呼び出す記述をするだけです。
あとはtestRunner.htmlからスイトページを呼び出すだけで複数のテストが一度に実行できることになります。
ファイルの位置関係は次のようになっているものとして、例を作成してみます。
currentDirectory |-jsunit | |-testRunner.html | |-app | |-jsUnitCore.js |-suitePage.html |-testPage1.html |-testpage2.html
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="application/xml; charset=UTF-8"/>
<meta http-equiv="Content-Script-Type" content="text/javascript"/>
<title>suitePage.html</title>
<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script>
<script>
// <![CDATA[
function suite() {
var mySuite = new top.jsUnitTestSuite();
mySuite.addTestPage('../testPage1.html');
mySuite.addTestPage('../testPage2.html');
return mySuite;
}
// ]]>
</script>
</head>
<body>
</body>
</html>
まず、スイトページを作成します。
スイトページには、suite()関数のみを記述します。
制約として、スイトページにテストケースを記述することはできません。
suite()関数の中で、まずjsUnitTestSuiteクラスのインスタンスを作成しています。
jsUnitTestSuiteクラスのインスタンスには、addTestPage()関数があるので、この関数を使って呼び出したいテストページを指定します。
絶対パスでも相対パスでもいいのですが、相対パスの場合はtestRunner.htmlからみた相対パスということを忘れないようにしましょう。
(ハマりますよ)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="application/xml; charset=UTF-8"/>
<meta http-equiv="Content-Script-Type" content="text/javascript"/>
<title>testPage1.html</title>
<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script>
<script type="text/javascript">
// <![CDATA[
function test() {
info('testPage1 test()');
}
// ]]>
</script>
</head>
<body>
</body>
</html>
suitePage.htmlから呼び出される普通のテストページです。
ログに「testPage1 test()」と記述します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="application/xml; charset=UTF-8"/>
<meta http-equiv="Content-Script-Type" content="text/javascript"/>
<title>testPage2.html</title>
<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script>
<script type="text/javascript">
// <![CDATA[
function test() {
info('testPage2 test()');
}
// ]]>
</script>
</head>
<body>
</body>
</html>
testPage1.htmlとほぼ同じです。 異なるのはログに出力する内容程度です。
あとはtestRunner.htmlからsuitePage.htmlを呼び出して、「Trace level」をdebugにして実行すれば、 「testPage1 test()」と「testPage2 test()」のログが表示されて、どちらも呼び出されたことが確認できます。
jsUnitTestSuiteクラスの関数には、addTestPage()関数の他に、addTestSuite()関数が用意されています。
addTestSuite()関数は、jsUnitTestSuiteクラスのインスタンスを引数に取ることができるので、
ある程度グループごとにjsUnitTestSuiteインスタンスを作成して、最後にぼぼーんとaddTestSuite()関数で取り込むといったことが出来るようになっています。