0

を使用して単体テストを作成する方法を理解し始めたところです"test/unit"。Selenium IDEで生成されたコードをコピーして、Rubyテストメソッドに貼り付けました。

しかし、Ruby.exeで実行すると、何らかの理由でエラーがスローされます。

Finished tests in 31.835891s, 0.0314 tests/s, 0.0942 assertions/s.

  1) Error:
test_method(MyTestClass):
NameError: uninitialized constant Test::Unit::AssertionFailedError
    teste-noticia.rb:30:in `rescue in verify'
    teste-noticia.rb:29:in `verify'
    teste-noticia.rb:42:in `test_method'

1 tests, 3 assertions, 0 failures, 1 errors, 0 skips

誰かが私がどのように正しく望ましい文字列をアサートするのを手伝ってくれるでしょうか?どんな良い習慣も歓迎します;-)。

コードは次のとおりです。

# encoding: utf-8
require "selenium-webdriver"
require "test/unit"

class MyTestClass  < Test::Unit::TestCase

  def setup
      @driver = Selenium::WebDriver.for :firefox
      @base_url = "http://www.yoursite.com"
      @driver.manage.timeouts.implicit_wait = 30
      @verification_errors = []
      @wait = Selenium::WebDriver::Wait.new :timeout => 10
    end


    def teardown
      @driver.quit
      assert_equal [], @verification_errors
    end

  def element_present?(how, what)
      @driver.find_element(how, what)
      true
      rescue Selenium::WebDriver::Error::NoSuchElementError
      false
    end

    def verify(&blk)
      yield
      rescue Test::Unit::AssertionFailedError => ex
      @verification_errors << ex
    end

    #your test methods go here
    def test_method
        @driver.get(@base_url + "/my-desired-path")

        verify { assert_equal "Obama wins and will move U.S. forward", @driver.find_element(:css, "h1").text }    

    end
end

編集

私の地元の宝石:

C:\Users\wmj>gem list

*** LOCAL GEMS ***

addressable (2.3.2)
bigdecimal (1.1.0)
childprocess (0.3.6)
ffi (1.1.5 x86-mingw32)
io-console (0.3)
json (1.5.4)
libwebsocket (0.1.5)
minitest (2.5.1)
multi_json (1.3.7)
rake (0.9.2.2)
rdoc (3.9.4)
rubyzip (0.9.9)
selenium-webdriver (2.26.0)
test-unit (2.5.2)
4

1 に答える 1

1

問題は、「ミニテスト」ジェムが必要であるが、「テストユニット」ジェムのクラスを使用しようとしていることだと思います。「Minitest」は、「Test-Unit」(1.8でデフォルトでインストールされた)ではなく、Ruby1.9でデフォルトでインストールされます。Minitestは、Test-Unitと部分的に下位互換性があります。

可能な解決策:

ミニテストに切り替えます:

Test::Unit::AssertionFailedError例外を引き起こしているのはverifyメソッド内です。あなたはそれをミニテストの同等物に変更することができます、それはであるように見えますMiniTest::Assertion。したがって、verifyメソッドは次のようになります。

def verify(&blk)
  yield
  rescue MiniTest::Assertion => ex
  @verification_errors << ex
end

Minitestの代わりにTest-Unitを使用します。

テストユニットのgemがすでにインストールされていると仮定して(gem install test-unit)、実行時にそのgemを使用することを手動で指定しますrequire 'test/unit'

gem "test-unit"
require "test/unit"
于 2012-11-12T17:22:22.057 に答える