1. ベースとなるURLを決める
テストはどこのマシンでも動作することができるように、 例えば、テストしようとするアプリケーションのURLが http://kona.xxx.jp/~yuichi/tmp/test/ の下にあるならば、このURLを環境変数URLBASEへ設定する。 テストケースの中では @urlbase として参照する。
2. レスポンスを受け取る
url = @urlbase + 'xxx/xxxx.html' response = Response::get( url )
3. HtmlElem
tree に含めたくない場合は WebUnit::Parser::ignore で不要なタグを 指定しておくことが可能。
4. フォームのテスト
テスト対象
<form action="xxxx" method="POST"> <input type="text" name="login" value="x"> <form>
テスト準備
response = Response::get( url ) form = response.form parameters = form.parameters
4.1. テキストフィールドなどのテスト
テキストフィールドなど(hiddenやpassword)は以下のようにして、 それぞれの属性の値を取得することができる。 (1)から(4)は等価であるので、テスト仕様として見やすいものを採用する。
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)
5. テーブルのテスト
テスト対象
<table> <tr bgcolor='white'> <td>EU/td <td><a href='sjis.html'>SJI/a</td> </tr> <tr bgcolor='red'> <td><a href='jis.html'>JI/a</td> <td>UTF-8</td> </tr> </table>
テスト準備
response = Response::get( url ) table = response.tables[0]
5.1. テーブルセルのテスト
単純な文字列をテストする場合、 以下の2つの方法で記述できる。
a. assert_equals( "EUC", table.at(1,1).data ) b. assert_include( "EUC", table.at(1,1) )
リンクが設定されている文字列をテストしたい場合は リンク自体のdataをテストする必要がある。 このため、c.はfailするので、d. か e. の形式で記述する必要がある。 e. の記述を行うとその他のタグで囲まれていても成功する。
c. assert_equals( "SJIS", table.at(1,2).data ) d. assert_equals( "SJIS", table.at(1,2).find("a").data ) e. assert_include( "SJIS", table.at(1,2) )
また、特定の HtmlElem が特定のセルに含まれている必要がある場合、 f. のように記述することができる。
f. assert( table.at(2,1).has?( response.links[1] ) )
5.2. テーブルローのテスト
ローの属性をテストする。
a. assert_equals( 'red', table.at(2).attrs['bgcolor'] )
ローに含まれるデータをテストする
b. assert_include( "SJIS", table.at(1) )
6. リダイレクト
6.1. HTTPリダイレクト
レスポンスがHTTPリダイレクトだと分かっている場合は以下のように記述する ことができる。HTTPリダイレクト(コード:302)でない場合は、例外が発生する。
response = Response::get( url ).redirect
6.2. JavaScriptによるリダイレクト(open)
response = Response::get( url ).open.read response = Response::get( url ).opens[0].read
7. パラメータの数
Form#params.size => Hash Form#parameters.size => Array Form#params.size => ユニークな名前を持つParamの数 Form#parameters.size => Paramの数 name属性に同じものが無ければ、この二つは同じ値となる。
A. 省略形
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