Google

PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

WebUnit Tips

ベースとなるURLを決める

テストはどこのマシンでも動作することができるように、例えば、テストしようとする アプリケーションのURLが http://kona.xxx.jp/~yuichi/tmp/test/ の下にあるならば、 このURLを環境変数URLBASEへ設定する。

テストケースの中では @urlbase として参照する。

レスポンスを受け取る

!block example
url = @urlbase + 'xxx/xxxx.html'
response = Response::get( url )
!endblock

HtmlElem

tree に含めたくない場合は WebUnit::Parser::ignore で不要なタグを指定しておくことが可能。

フォームのテスト

テスト対象

!block example
<form action="xxxx" method="POST">
  <input type="text" name="login" value="x">
<form>
!endblock

テスト準備

!block example
response = Response::get( url )
form = response.form
parameters = form.parameters
!endblock

テキストフィールドなどのテスト

テキストフィールドなど(hiddenやpassword)は以下のようにして、 それぞれの属性の値を取得することができる。

  1. から(4)は等価であるので、テスト仕様として見やすいものを採用する。
!block example
assert_input( 'login', 'text', 'x', parameters[0] )    # ---(1)

spec = { 'name'=>'user', 'type'=>'text', 'value'='x' } # ---(2)
assert_attrs( spec, parameters[0] )                    # ---(2)

assert_equals( 'login', parameters[0].name )           # ---(3)
assert_equals( 'text', parameters[0].type )            # ---(3)  
assert_equals( 'x', parameters[0].value )              # ---(3)    

assert_equals( 'login', parameters[0].attrs['name'] )  # ---(4)
assert_equals( 'text', parameters[0].attrs['type'] )   # ---(4)  
assert_equals( 'x', parameters[0].attrs['value'] )     # ---(4)    
!endblock

テーブルのテスト

テスト対象

!block example
<table>
  <tr bgcolor='white'>
    <td>EUC</td>
    <td><a href='sjis.html'>SJIS</a></td>
  </tr>
  <tr bgcolor='red'>
    <td><a href='jis.html'>JIS</a></td>
    <td>UTF-8</td>
  </tr>
</table>
!endblock

テスト準備

!block example
response = Response::get( url )
table = response.tables[0]
!endblock

テーブルセルのテスト

単純な文字列をテストする場合、以下の2つの方法で記述できる。

assert_equals( "EUC", table.at(1,1).data ) # a.
assert_include( "EUC", table.at(1,1) )     # b.

リンクが設定されている文字列をテストしたい場合は リンク自体の data をテストする必要がある。 このため、c. はfailするので、d. か e. の形式で記述する必要がある。 e. の記述を行うとその他のタグで囲まれていても成功する。

assert_equals( "SJIS", table.at(1,2).data )           # c.
assert_equals( "SJIS", table.at(1,2).find("a").data ) # d.
assert_include( "SJIS", table.at(1,2) )               # e.

また、特定の HtmlElem が特定のセルに含まれている必要がある場合、 f. のように記述することができる。

assert( table.at(2,1).has?( response.links[1] ) )  # f.

テーブル行のテスト

行の属性をテストする。

assert_equals( 'red', table.at(2).attrs['bgcolor'] )

行に含まれるデータをテストする

assert_include( "SJIS", table.at(1) )

リダイレクト

HTTPリダイレクト

レスポンスがHTTPリダイレクトだと分かっている場合は以下のように記述する ことができる。HTTPリダイレクト(コード:302)でない場合は、例外が発生する。

response = Response::get( url ).redirect

JavaScriptによるリダイレクト(open)

response = Response::get( url ).open.read
response = Response::get( url ).opens[0].read

パラメータの数

Form#params

これは Hash。ユニークな名前を持つ Param。

Form#parameters

これは Array。Paramの数。

name属性に同じものが無ければ、この二つは同じ値となる。

省略形

  • Response#form → Response#forms[0]
  • Response#link → Response#links[0]
  • Response#open → Response#opens[0]
  • Response#table → Response#tables[0]
  • Response#frame → Response#frames[0]
  • Response#params → Response#forms[0].params