WebUnit Tips

yuichi TAKAHASHI(Japan Brainware Trust,Inc.)
$Id: TIPS-ja.html,v 1.8 2001/10/19 07:38:38 yuichi Exp $


Table of Contents


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