script.aculo.us付属のユニットテスト(unittest.js)の使い方 後編
前回に引き続き、script.aculo.usに付属の ユニットテスト(unittest.js)の使い方です。
今回は、ベンチマーク関数やマウス、キーボードのシミュレート関数の使い方を解説していきます。
benchmark関数
benchmark関数は、前回挙げた assert系とはちょっと動きが異なり、その名の通り、任意の関数のベンチマーク(処理時間の計測)を取るために使います。
- benchmark( func [, times] )
- funcを timesで指定した回数だけ実行し、処理にかかった時間をログに表示します。timesを省略すると、一回だけ実行されます。
- wait( time, func )
- timeミリ秒後に、funcで指定したコードを実行します。
- Event.simulateMouse( element, eventName[, options] )
- elementに対して、eventNameで指定したイベントを発生させます。(Firefox上でのみ動作)eventNameは Event.observeなどと同じく、イベント関数名の'on'を除いたもの('click'や'mousemove'など)を指定します。 optionsには以下のメンバ(いずれも任意)を持ったオブジェクトを指定できます。
pointerX integer クリック位置の X座標 pointerY integer クリック位置の Y座標 buttons integer ボタンが何回クリックされたか ctrlKey boolean ctrlキーが押されたか altKey boolean altキーが押されたか shiftKey boolean shiftキーが押されたか metaKey boolean metaキー(?)が押されたか - Event.simulateKey( element, eventName[, options] )
- elementに対して、eventNameで指定したキーボードイベントを発生させます。(Firefox 1.0.4以前で動作)eventNameは simulateMouseと同じく、イベント関数名の'on'を除いたもの('keydown'や'keyup'など)を指定します。 optionsには以下のメンバ(いずれも任意)を持ったオブジェクトを指定できます。
ctrlKey boolean ctrlキーが押されたか altKey boolean altキーが押されたか shiftKey boolean shiftキーが押されたか metaKey boolean metaキー(?)が押されたか keyCode integer 仮想キーコード charCode integer 文字コード
例えば、こんな感じで使います。
var domOperation = function(){ var div = document.createElement( 'div' ); document.body.appendChild( div ); Element.remove( div ); };benchmark( domOperation, 1000 );
この例では、DOM(DIV要素)の生成、DOMツリーへの追加、削除を 1000回実行するのに要する時間を測定しています。
結果はこんな感じで表示されます。 (ちなみに Firefox1.5.0.9 / Windows 2000 で実行した結果です。)
テストの下地だけ作っておけば、手軽にベンチマークが実行できるので 便利です。
wait関数
waitは、テストを補助するための関数です。
という説明だと、タイマーとあまり変わらない感じのですが、実際には以下のような記述して テストを待機、継続させるために使います。
// (テストコード) // (なにかの処理) wait( 1000, function(){ with( this ){ assert( /* なにかの処理の結果を判別するコード */ ); // 続きのテストコード } } );
注意点としては、waitを複数回行う場合には、第 2引数の関数をネストする形で書く必要があります。(wait()関数の後ろに書いてしますと、wait行が実行された直後に実行されてしまいます。)
wait( 1000, function(){ with( this ){ // さらに 1秒待つ wait( 1000, function(){ with( this ){ // もっと待つ wait( 1000, function(){ with( this ){ // テストの続きは、ここに書いていく。 } } ); } } ); } } );// ここに書いた処理は、最初の wait関数の直後に(待機しないで)実行される。
Event.simulateMouse, Event.simulateKey
最後に、テスト用に追加されている Eventクラスの関数を二つ。その名の通り、マウスとキーボードのイベントをシミュレートします。
ただし、残念ながら Firefox限定で、かつ simulateKeyは Firefox 1.0.4 以前のバージョンでないと動作しないようです。
なので、本格的なテストの自動化のような使い方はできず、イベント関数の バインディングがうまくいっているかのチェックなどといった、
簡単な確認に使うくらいに思っておいたほうがよさそうです。
ちなみに、Firefox(Mozilla)のイベント処理はこちらが詳しいです。→ DOM:event (on Mozilla Developer Center)
benchmarkと waitを使用した テストのサンプルを用意しましたので、ご覧になってみてください。
以上で script.aculo.usの unittestの一通りの使い方の解説はおしまいです。
そこまで高機能なテストフレームワークではないですが、prototype.jsや script.aculo.usを用いたコードのテストとしては比較的手軽で便利に使えるのではないでしょうか。
であ、また。