【レポート】
QUnitにはここまで紹介したもの以外にも、さまざまな機能が用意されている。
上記のうち、ここでは「expect()を使用したテスト」「module()を使用したテスト」の書き方を紹介しよう。
expect()はtest()で使用する関数内に記述する。そのテスト内で実行されるアサーション数の予測値を指定しておく。指定した値と実際に実行されたアサーションの数が一致しない場合は、たとえ全アサーションにpassedしていてもfailed扱いとなる。
expect.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<title>Expect test / pass</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<link href="./qunit/qunit.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="./jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="./qunit/qunit.js"></script>
<script type="text/javascript">
<!--
$
(
function()
{
test('Expect test', function() {
expect(2);
var testString = 'testValue';
ok( 5 < testString.length, 'testStringが5文字を超えていること');
ok( 'testValue' === testString, 'testStringが「testValue」であること');
});
}
);
-->
</script>
</head>
<body>
<h1 id="qunit-header">QUnit Test Suite</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
</body>
</html>
「Expect test」テストで使用する関数の先頭にexpect()でアサーション数の予測値を2とした。実際に使用したokメソッドの数も2つ。これをWebブラウザで表示する。
expect.htmlのコードのうち、expect(2)をexpect(1)に変更して再度Webブラウザで表示してみよう。
expect()で指定した数と、テスト内で実際に実行されたアサーションの数が一致しなかった。「Expected 1 assertions, but 2 were run」と表示され、Expect testテストはfailed判定となる。
モジュール名を定義する。定義したモジュール名をtest()のname内で使用することで、各テストをモジュールで区切り、一意のグループとして扱うことができる。なおmodule()は以前のQUnitに実装されていた機能と比較すると、いくつか動作の違いがあるので注意されたい。
module.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<title>Module test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<link href="./qunit/qunit.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="./jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="./qunit/qunit.js"></script>
<script type="text/javascript">
<!--
$
(
function()
{
test('test', function() {
var testString = 'testValue';
ok( 5 < testString.length, 'testStringが5文字を超えていること');
ok( 'testValue' === testString, 'testStringが「testValue」であること');
});
module('module21');
test('module1 - test 1', function() {
var testString = 'testValue';
ok( 5 < testString.length, 'testStringが5文字を超えていること');
ok( 'testValue' === testString, 'testStringが「testValue」であること');
});
test('module1 - test 2', function() {
var testString = 'testValue';
ok( 5 < testString.length, 'testStringが5文字を超えていること');
ok( 'testValue' === testString, 'testStringが「testValue」であること');
});
module('module2');
test('module2 - test 1', function() {
var testString = 'testValue';
ok( 5 < testString.length, 'testStringが5文字を超えていること');
ok( 'testValue' === testString, 'testStringが「testValue」であること');
});
}
);
-->
</script>
</head>
<body>
<h1 id="qunit-header">QUnit Test Suite</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
</body>
</html>
全4つのテストのうち、2つを「module1」、1つを「module2」として定義した。これをWebブラウザで表示する。
現時点ではいままでのように、テスト名の先頭に「(モジュール名) :」という文字列は表示されないようだ。マニュアルに「All tests that follow get the name of this module prepended.」と記載されていることから、今後表示される可能性がある。
このほか、各テストにモジュールという概念を定義しておくことで「あるモジュールのみのテストをおこなう」といったことも可能となる。Webブラウザで表示する際、ファイル名に引数でモジュール名を指定すると関連するテストのみが実行される。
QUnitの使い方、移行後の変更点を簡単に紹介した。テストスイートの書き方については成果物のtest.jsのほかにも、実際にjQueryのテストに使用されているファイルが「REFERENCE TEST SUITES」として掲載されているので、そちらも参考にされたい。
Webアプリケーションの需要が高い今日では、JavaScriptの出番もおおい。開発を円滑にすすめる上でも、テストスイートは積極的に使っていきたいところだ。
| jQuery on iPhone - jQTouchを使ったWebアプリ開発 [2009/9/8] |
| jQuery開発者、ユニットテストフレームワークの報告求める [2009/7/6] |
| JavaScriptテストをスケールさせるファイナルウェポン"TestSwarm" [2009/3/24] |
| 週刊jQuery登場 [2009/3/17] |
| 大幅な高速化を実現! 流れるインタフェースのjQuery 1.3登場 [2009/1/28] |
【レポート】選ばれるツールを目指す - クロスプラットフォーム対応UI開発ツールのQt
【コラム】FileMaker×PHPで作る、簡単・便利なWebアプリ 第33回 API for PHPでのレコード編集方法、関連メソッド紹介(1)
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
[東京スカイツリータウン]1/2000の模型が登場 スカイツリーやオフィス、駅など精巧に再現 [12:00 5/27] ホビー |
|
【連載】これだけは要チェック! TOEIC(R)単語帳 第106回 今回のお題は…「afterward」 [12:00 5/27] キャリア |
|
【レポート】駆け出しイラストレーターのでこ、自分のDTPスキル不足を憂うの巻 [12:00 5/27] クリエイティブ |
|
AKB48指原莉乃がアシカとコラボ!「センターになりたいです…とか言えたら」 [11:30 5/27] エンタメ |
|
更伊俊介の小説「犬とハサミは使いよう」エースでマンガ化 [11:25 5/27] ホビー |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。