FuncUnitを使ってみた〜イベント発生のテスト
FuncUnitを使って、イベント発生のテストを行った。
少し困ったことは、FuncUnitではbind関数が用意されていなかったこと。
今回のテストでは、「画像にマウスをかざしてマウスオーバーイベントを発生させると画像が違う画像に変わり、マウスオーバーを外すと画像が元に戻る」という動作をテストした。
そのため、画像へのマウスオーバー発生時に、表示されるべき画像がsrc属性に設定されているかをテストする関数を、コールバック関数としてマウスオーバーイベントにバインドさせたかった。そのために、jQueryのbind関数を使えると思っていたのだが、FuncUnitでは用意されていなかった。
FuncUnitのページで使えそうな関数がないかを調べていたら、moveメソッドがあったのでそれを使用した。moveとは、ある要素を別の要素へ移動させる。それに従い、mouseoverやmouseoutsを引き起こすものである。
■テスト対象の動作
「画像にマウスをかざしてマウスオーバーイベントを発生させると画像が違う画像に変わり、マウスオーバーを外すと画像が元に戻る」という動作。
■テストケース(funcunit_test.js)
・・・前回のエントリーで紹介したテストコードの続き・・・ module("Myapp TestGropu 2",{ setup : function(){ S.open("myapp.html") } }) test("Mouse Hover Test", function(){ //mouseオーバー時に実行するテスト用メソッド var mouseOverCallBack = function(){ //mouseオーバー後に表示される画像(giko_w.jpg) var expectedImg = "./img/giko_w.jpg"; var actualImg = S("#giko_kabe").attr("src"); same(actualImg, expectedImg); }; //FuncUnitにはbind関数やunbind関数は存在しないので動かない //S("#giko_kabe").bind("mouseover", mouseOverCallBack).trigger("mouseover").unbind("mouseover", mouseOverCallBack); //仕方なく、FuncUnitで用意されているmoveメソッドを使用してmouseoverを実現 var options = '#giko_kabe'; S("#typehere").move(options, mouseOverCallBack); }) test("Mouse HoverOut Test", function(){ //mouseオーバーが外れた時に実行するテスト用メソッド var mouseOverOutCallBack = function(){ //mouseオーバーを外した後に表示される画像(giko_kabe.jpg) var expectedImg = "./img/giko_kabe.jpg"; var actualImg = S("#giko_kabe").attr("src"); same(actualImg, expectedImg); }; //FuncUnitにはbind関数やunbind関数は存在しないので動かない //S("#giko_kabe").bind("mouseover", mouseOverCallBack).trigger("mouseover").unbind("mouseover", mouseOverCallBack); //仕方なく、FuncUnitで用意されているmoveメソッドを使用してmouseoverを外す var options = '#typehere'; S("#giko_kabe").move(options, mouseOverOutCallBack); })
■テスト対象の画面(myapp.html)
<html> <head> <title>My Demo App</title> <script src="./jquery-1.5.2.min.js" type='text/javascript'></script> <script type='text/javascript'> $(document).ready(function(){ //画像差し替え $('#giko_kabe').hover(function(){ //マウスhover時に画像を変える $(this).attr('src', './img/giko_w.jpg'); }, function(){ //マウスhoverが外れた時に画像を元に戻す $(this).attr('src', './img/giko_kabe.jpg'); } ); }); </script> </head> <body> <h2>FuncUnit Demo</h2> <h2>Type something in a textbox and Click "Add input" button:</h2> <input type="text" id="typehere"/> <input type='button' value="Add input" id='add'/> <div id='seewhatyoutyped'>Original string</div><br> <h2>Move mouse over the image below to change it into another:</h2> <img id='giko_kabe' src="./img/giko_kabe.jpg" alt='giko' width="150" height="150"/> </body> </html>
実行した結果は、下記(1番最初のテスト結果は前回のエントリーのもの)。