CSS Selector Generator | CSS のセレクタ一覧を一発で自動生成!

11

04月2009年

jQueryのためのテストツール QUnit でテスト駆動開発入門を写経する

tanaka 03:51 AM

  • はてなブックマークに登録
  • livedoorクリップに登録
  • Yahoo!ブックマークに登録
  • deliciousに追加
こんにちは!まだまだ開発者テスト修行中のktanakaです。 今日は、jQueryについてくるユニットテストツールのQUnitで遊んでみます。

QUnitの概要

QUnitはjQueryプロジェクトの為のユニットテストツールです。(QUnit - ABOUTより)有名な各種xUnitフレームワークよりチェックのための関数も少なく、シンプルに書けそうな感じです。そしてなによりブラウザ上でテストが走ります。

Using QUnitを見るとテストに必要なものがわかりますが、必要なファイルは、jquery.js, QUnitのテストランナー(testrunner.js)とスタイルシート, テスト対象のコードとテストコードです。

Moneyオブジェクトの例を写経

いきなりjQueryプラグインのテストとか心臓に悪そうなので、普通のテストをやってみます。(dollar.test.js)

ちなみにこのエントリーで完成したテストランナーはTDD By Sample Test Suiteで実行することができます。


test("Multiplication", function(){
    var five = new Dollar(5);
    five.times(2);
    equals(five.amount, 10);
});

このテストコードはケント・ベック著「テスト駆動開発入門」(ピアソン・エデュケーション・2003)のMoneyオブジェクトの例をJavaScriptにしたものです。

さて、このコードをFirebugを有効にしたFirefoxで走らせると、テストは失敗し、2つのエラーになります。ただエラーになるだけでなく気の利いたメッセージを表示してくれました。


Test Multiplication died, exception and test follows
ReferenceError: Dollar is not defined message=Dollar is not defined

Dollarを実装しよう

エラーになってレッドバーが派手に表示されたことを確認したら、Dollarを実装していきます。(dollar.js)scriptタグも追加しましょう!


var Dollar = function(amount){
};

Javaのクラスの代わりにコンストラクタ関数を書くことにします。(newを付けて呼び出し、オブジェクトを生成する関数のことです)そしてまたテスト実行します


Test Multiplication died, exception and test follows
TypeError: five.times is not a function message=five.times is not a function

こんどはfive.timesが関数ではないと言われました。JavaScriptでは宣言していない変数はundefinedという値になってしまうので、こう言われてしまいます。そこでtimes関数を実装します。


var Dollar = function(amount){
};
Dollar.prototype.times = function(multiplier){
}

JavaやPHPのコードとは大分雰囲気が違いますが、これで、timesは変数Dollarに属する関数になりました。Firebugコンソールのエラーも消えたと思います。テスト結果を見てみると、、、


   1. Multiplication (1, 0, 1)
         1. failed, expected: 10 result: undefined
Tests completed in 5 milliseconds.
1 tests of 1 failed.

1つのテストのうち、1つが失敗と表示されます。最初に書いた、テストの「equals」の部分が失敗したようです。


test("Multiplication", function(){
    var five = new Dollar(5);
    five.times(2);
    equals(five.amount, 10);
});

さて、テストにパスするように実装します。


var Dollar = function(amount){
  this.amount = amount;
};
Dollar.prototype.times = function(multiplier){
  this.amount = this.amount * multiplier;
}

テストを実行すると、成功し、グリーンバーが表示されたことと思います。(さきほども紹介しましたTDD By Sample Test Suiteで実行結果を見てください。)かけ算するためのクラスが実装できました。

まとめ

今日はjQueryのユニットテストツールのQUnitを試して、テスト駆動開発入門のコードをJavaScriptでほんのちょっとだけ実装してみました。

テスト駆動開発入門テスト駆動開発入門
Kent Beck 長瀬 嘉秀 テクノロジックアート

ピアソンエデュケーション 2003-09
売り上げランキング : 149384
おすすめ平均

Amazonで詳しく見る
by G-Tools

バシャログスタッフによるWebサイト制作サービス

トラックバック

このエントリーのトラックバックURL
http://c-brains.jp/cgi-bin/mt/###/1856
###はmt-tb.cgiに変更してください。

コメントを投稿

ページの先頭へ

POPULAR TAGS
  • バシャログスタッフによるWebサイト制作サービス

ARCHIVE

特集

RECENT COMMENTS

ishida on CSS Nite in Ginza, Vol.49「バシャログ LIVE」 で紹介したDreamweaverの正規表現クエリーを公開します
>市川さん コメントありがとうございます。 前提条件の部分
ichikawa on 1.2.3で整えるPHP開発環境【STEP.1】 XAMPPをインストール
いつもバシャログ。をご覧いただきありがとうございます。 >
市川 on CSS Nite in Ginza, Vol.49「バシャログ LIVE」 で紹介したDreamweaverの正規表現クエリーを公開します
どういう前提での使用例なのか、わかりませんが、 タグを明示的
studio-8ch on 1.2.3で整えるPHP開発環境【STEP.1】 XAMPPをインストール
いつも記事を大変興味深く、拝見いたしております。 是非、A
sakai on [使える CSS テクニック] CSSで実現するプルダウンメニュー
>とらのすけさん コメントありがとうございます。 CSS