Hatena::ブログ(Diary)

TechTalkManiacs このページをアンテナに追加 RSSフィード

2011-12-19

QunitによるWeb標準系UIのシナリオテスト

 このエントリーHTML5 Advent Calendarに参加しています。本当は18日目だったのですが、こんな時間になってしまいました。

 

 Web標準UI、というのは私が勝手に呼んでいる呼称なのですが、HTML+JavaScript+CSSを使ったUIのことです。なので、大まかにはWebサイトなども含まれます。

 Web標準UIは表現力の高さが魅力ですが、その分、画面が正常に動作するかのテストが大変です。もちろんSeleniumというツールもあるのですがこれは有名なので適当に検索してもらうとして、今回はあまりこういった文脈では紹介されることないQunitを紹介したいと思います。

QUnitとは?

 元々はjQueryのテスティングフレームワークとして開発されたもので、その時はJQUnitという名前でした。現在はjQueryから独立して依存性をなくしています。

 各言語にある同様のツールとひとまとめにしてxUnitという呼称グルーピングされている単体テスト向けフレームワークなのですが、基本となっている言語javascriptなので、一般的なサーバーサイドの出力として使われるJSONHTMLXMLといった出力の分析に使えるという特徴があります。このため、画面出力から切り離してサーバーサイドの出力をテストしたい場合にも有効に使えます。

インストールと実際のテスト

 QUnitインストールはとても簡単です。レポジトリからダウンロードしてきて適当な場所に配置するだけです。test以下にあるHTMLファイルを編集することで、テストの記述ができます。

 単体テストのやり方自体は、このエントリーが詳しいので参考にしてください。

 このテストの際に通信部分にjQueryを使うと、サーバーサイドの出力をパースしてその結果を元にテストできます(jQueryでxmlをパースする例)。

 HTMLファイルの場合、IDやセマンティックなタグを生かしたコード規約を決めておくと将来的な変更に対しての追加コストが少なくなるでしょう。

シナリオテストをする

 ざっくりとして記述でしたが、これでそれなりの説明になっていることからわかりますように単体の機能へのテストに対してはQUnitはシンプルで強力な機能を提供してくれます。しかし、前提となる操作を必要とする操作をテストするためのシナリオテストの場合、QUnitには落とし穴があります。

 

 QUnitは各テストをそれぞれ独立したテストとして実行します。なので、一時的にテストを停止するためのstopや非同期処理のためのテストであるasyncTestを使ったとしても、別のテストはそのまま実行されてしまいます。

    jQuery.get("/test/example/",function(data){
               start(); 
		
		same(data.test, "ok"); 

    });
    
});

asyncTest("asyncTestBad2",function(){//このテストが前のテストの終了を待たずに実行される
    jQuery.get("/test/example/next",function(data){
               start(); // 10ms後再会
		
		same(data.test2, "ok"); 

    });
    
});

 このため、非同期処理である通信を伴うテストの場合、一種のコールバック関数群としてテストを記述する必要があります。

asyncTest("asyncTestOK1",function(){
       jQuery.get("/test/example/",function(data){
               start(); 
		
	       same(data.test, "ok");
               test2();


       });
    
});

function test2(){
	asyncTest("asyncTestOK1",function(){
	    jQuery.get("/test/example/next",function(data){
	               start(); 
                       same(data.test, "ok"); 
                       //必要ならば次のテストを呼び出す関数をここに書く

	    });
    
	});
}

 

 こうすることで、単体テストツールであるQUnitを使ってシナリオテストをすることが可能になります。

 

まとめ

  1. QUnitを使うと、従来は難しかったHTMLの崩れやテンプレートへの変数割付ミスなどもテストできます
  2. QUnitシナリオテストとして使う場合、コールバック関数として記述する必要があります
  3. 今年もクリスマスは中止です

 

 

2011-10-28

今日MLに投稿したもの

 メーリングリストhtml5j.orgに投稿した情報をこちらでも流してみます。

開発

Chrome17からindexedDBの仕様が少し変わるそうです

 これについては波多野さんの補足情報もすばらしいので当該スレッドも参照してください

一般

Youtubeが一部のビデオを自動にHTML5で配信へ

 はてなではうまく貼れないので、ここの動画をスタートさせた後に右クリックしてみてください。なお、動画Microsoftオフィシャルです。時代ですよね。

Google+にRipplesがスタート


 HTML5による視覚化のお手本みたいな機能なので紹介します。内容的にはCanvasで、独自のベクタグラフィックか、もしかしたらRaphaelあたりでも使っているかもしれません。

2011-09-16

Google+のAPIが公開されたのでまとめてみました

 本日、Google+APIが公開されました。現状としては試験段階で、APIそのものは2種類3パターンしかなく、レスポンス形式はJSON、及びJSONPにしか対応していません。また、制限がありますが申請すれば拡張可能です(後述)

APIキーの取得

 Google+APIの使用には、APIコンソールが必要です。Googleログインした状態でAPIコンソールに行き、左側にあるセレクタから新しいプロジェクトを作り、Google+APIを有効にした上でAPI AccesというタブをクリックするとAPI Keyが取れます

APIの形式

 Google+APIはいわゆるRESTfullAPIで、特定のURLにリクエストを投げるとレスポンスを受け取る形式です。

 いくつか共通のリクエストがありますが、そのうち必須なのはkeyというキーです。ここに必ずAPIキーを設定する必要があります。

ユーザー認証

 Google+APIはOAuth2.0による権限委譲に対応しています。詳しくはドキュメントに書かれていますが、基本的にはリクエストの対象となるユーザーを指定するパラメーターにmeを使えるようになることを含めてFacebookと同じです。違うのはScopeに設定するのが権限の名前ではなく、サービスに対応したURLである点です。Google+であればhttps://www.googleapis.com/auth/plus.meになります。

APIでできること

 現在使用可能なAPIは大きく分けて二つあり、ひとつはユーザー情報の取得、もうひとつはストリームへの投稿内容の取得です。後者はさらに二つに分かれていて、特定の投稿と特定のユーザーの投稿の二種類に分かれています。

 ここで注目すべきなのは、投稿内容の取得です。再共有の場合、レスポンスのobjectという部分にURLを含めた最初の共有のデータが入っています。残念ながら、Tumblrのように途中の部分は入っていませんが、これは夢が広がるんじゃないでしょうか?

API制限

 APIに制限はありますが、これがかなりややこしく、一日に1000リクエスト、または一秒当たり5ユーザーとなっています。

 後者は、サーバーサイドのアプリサーバー側でリクエストを生成するようなパターンに対して適用され、ユーザーIPアドレスをキーuserIpに含めることで、そのIPアドレス一つ一つを独立したユーザーとみなして、各ユーザーごとに制限を化すことができるようになります。

 また、前述のAPIコンソールのQuotaから、APIの使用状況及び拡張申請画面に行くことができます。

まとめ

 現状では制限は多いですが、それでも結構遊べそうな気がします。拡張申請さえ通ればですが、それなりにあれこれするアプリが作れる…かもしれません

2011-07-06

もうGoogle+の商用利用が始まっている

 Google+が限定公開されて一週間ほどですが、もういくつかのニュースサイトが公式アカウントを取得してGoogle+で活動を始めています。

  1. ABC News Radio
  2. Breaking News
  3. Chicago Sun-Times
  4. GMA News
  5. KOMU News
  6. Mashable
  7. The Next Web
  8. St. Louis Post-Dispatch とそのマスコット(?)Weatherbird
  9. Search Engine Land
  10. CNET

 有名な技術ニュースサイトから地方ニュースまでいろいろですが、やはりどこも使い方がこなれていて、双方向メディアであることをきちんと意識した使い方をしています。

 例えば、CNET日本時間の7日午前3時に行われるFacebookの発表内容について意見を聞いています

 さすがに後発だけあって、使う側も慣れているみたいですね。

 

 一応、この使い方は規約的にはナシみたいですが、問い合わせたSearch Engine Land自身、回答をもらった時にはもうアカウントを作っちゃっていたという微笑ましい(?)オチがついています。

2011-07-05

世界中で行われているマイマップの製作過程がリアルタイムで見えるサービス

 なぜか日本ではあまり話題になっていませんが、Googleがちょっと面白いサービスを出しています。

※マイマップでなくてMap Makerでした。詳しくはこちら

 Google Map Maker

f:id:kagigotonet:20110705062300p:image:w640

 

 これは世界中で行われているGoogle Mapsのマイマップの製作過程をリアルタイムで見ることができるサービスです。スクリーンショットではちょっと解りにくいのですが、地図上に線を引いている様子などもリアルタイムでわかってちょっとした世界旅行気分になれます。


 また、こういうサービスが出せるということはサーバー側でリアルタイムの処理をフックしてプッシュ通信できるだけの仕組みがあるということです。

 色々と妄想が広がりますね