トップ «前の日記(2005-03-25) 最新 次の日記(2005-03-27)» 編集

3 日坊主日記


2005-03-26 [長年日記]

_ [Ruby] Test::Unit --runner=webrick

Selenium の仕組みを参考に書いてみたら動いたので置いてみる。

http://www.moriq.com/ruby/archive/test-unit-ui-webrick.zip

lib/test/unit/ui/webrick に置いて

autorunner.rb の RUNNERS:

       :webrick => proc do |r|
         require 'test/unit/ui/webrick/testrunner'
         Test::Unit::UI::Webrick::TestRunner
       end,

と追加すれば

 ruby test.rb -r webrick
 rake TESTOPTS="-r webrick"

などと使えます。役に立ちません。orz

Windows IE しか考慮してないです (@browser を換えれば動くかも)。

_ [Ruby] Test::Unit --runner=webrick(2)

http://www.moriq.com/ruby/archive/test-unit-ui-webrick-001.zip

red/green bar と counter を付けました。

_ [Ruby] Test::Unit --runner=webrick(3)

"but was" で message が切れるので調べると、short_display は \n で切るのであった。

_ OSX lsbom fink

ファイルがロックされていて消せないというお客さんの話。

http://pcweb.mycom.co.jp/column/osx/123/ を参考に lsbom して sudo で消した。

fink というものがあるらしい。

_ [Rails][Selenium] with Selenium

Selenium runner のときの Selenium は async ではない (XMLHttp の第二引数が false)。

assert_* と verify_* の違い。

  • assert_* は haltOnFailure = true
  • verify_* は haltOnFailure = false

haltOnFailure = true だと (JavaScript の) 例外を投げ直す。 これで TestLoop が止まるので、assert_* でこけると selenium.rb に渡らない。

verify_* でこけると、オリジナル仕様では SeleniumCommandError が飛ぶ。 これだと Test::Unit と合わせにくいので、素通りするように変更した。

     def do_command(commandString)
       timeout(@timeout) do
         result = nil
         t = Thread.new do
           #puts "about to push #{commandString} onto the out queue"
           @out_queue.push(commandString)
           if "|testComplete|||" != commandString
             #puts "Waiting for next reply/request"
             result = @in_queue.pop
           end
         end
         trap("INT") { t.kill }
         t.join
         case result
         when nil, "OK", "PASSED"
         else
           # raise SeleniumCommandError, result
         end
         result
       end
     end

assert_equal は "OK", "PASSED" に対して行う。verify_* でこけたときの message もこの result に渡るので、

 <"PASSED"> expected but was
 <"Expected 7 (string) but was 8 (string)">.

こんなふうに表示されて都合が良い。

 require File.dirname(__FILE__) + '/test_helper'
 # require 'test/unit'

 class SeleneseTest < Test::Unit::TestCase
   fixtures :customers

   def setup
     @selenium = SeleneseDispatchServlet.proxy
     @browser = Selenium::WindowsIEBrowserLauncher.new
     @browser.launch("http://#{OPTIONS[:ip]}:#{OPTIONS[:port]}/selenium-driver/SeleneseRunner.html")
     trap("INT") { teardown }
   end

   # Send some commands to the browser

   def _test_auth
     assert_equal "OK", @selenium.open('/login')
     i = Iconv.open("UTF-8", "Shift_JIS")
     u = i.iconv('高松')
     assert_equal "PASSED", @selenium.verify_value('shop_name', u)
     assert_equal "OK", @selenium.__type('shop_password', 'udon')
     assert_equal "OK", @selenium.click_and_wait('document.forms[0].submit_button')
     assert_equal "PASSED", @selenium.verify_location('/customer/find')
   end

   def _test_set_expire_on
     assert_equal "OK", @selenium.open('/customer/edit/1')

     assert_equal "PASSED", @selenium.verify_selected('customer[update_on(1i)]', '2002')
     assert_equal "PASSED", @selenium.verify_selected('customer[update_on(2i)]', '7')
     assert_equal "PASSED", @selenium.verify_selected('customer[update_on(3i)]', '28')

     assert_equal "PASSED", @selenium.verify_selected('customer[expire_on(1i)]', '2003')
     assert_equal "PASSED", @selenium.verify_selected('customer[expire_on(2i)]', '1')
     assert_equal "PASSED", @selenium.verify_selected('customer[expire_on(3i)]', '27')

     assert_equal "OK", @selenium.click('document.forms[0].set_expire_on_button')

     assert_equal "PASSED", @selenium.verify_selected('customer[expire_on(1i)]', '2003')
     assert_equal "PASSED", @selenium.verify_selected('customer[expire_on(2i)]', '7')
     assert_equal "PASSED", @selenium.verify_selected('customer[expire_on(3i)]', '27')
   end

   def test_auth_and_calc_expire_date
     _test_auth
     _test_set_expire_on
   end

   def teardown
     @selenium.test_complete
     # @browser.close
   end

 end

_ [Rails] ML

To: と Cc: に付けてしまった。orz

[]