Ruby Watir не может найти метод assert вне класса выполнения? - PullRequest
0 голосов
/ 24 января 2011

У меня есть класс, который я хочу использовать во многих тестовых случаях:

require 'rubygems'
require 'test/unit'
require 'watir'

class Tests < Test::Unit::TestCase
  def self.Run(browser)
    #  make sure Summary of Changes exists
    assert( browser.table(:class, "summary_table_class").exists? )
    # make sure Snapshot of Change Areas exists
    assert( browser.image(:xpath, "//div[@id='report_chart_div']/img").exists?  )
    # make sure Integrated Changes table exists
    assert( browser.table(:id, 'change_table_html').exists? )
  end
end

Однако при запуске в одном из моих тестовых случаев:

require 'rubygems'
require 'test/unit'
require 'watir'
require 'configuration'
require 'Tests'

class TwoSCMCrossBranch < Test::Unit::TestCase
  def test_two_scm_cross_branch
    test_site = Constants.whatsInUrl
    puts " Step 1: go to the test site: " + test_site
    ie = Watir::IE.start(test_site)

    Tests.Run(ie)

  end
end

Я получаю ошибку:

NoMethodError: undefined method `assert' for Tests:Class
    C:/p4/dev/webToolKit/test/webapps/WhatsIn/ruby-tests/Tests.rb:8:in `Run'

Чего не хватает? Спасибо!

Ответы [ 2 ]

2 голосов
/ 25 января 2011

assert () - это метод экземпляра в TestCase, поэтому он будет доступен только для экземпляров тестов. Вы вызываете его внутри метода класса, поэтому Ruby ищет метод класса в Tests, которого не существует.

Лучший способ сделать это - сделать Tests модулем, а метод Run - методом экземпляра:

module Tests
  def Run(browser)
    ...
  end
end

Затем включите модуль Тесты в свой тестовый класс:

class TwoSCMCrossBranch < Test::Unit::TestCase
  include Tests

  def test_two_scm_cross_branch
    test_site = Constants.whatsInUrl
    puts " Step 1: go to the test site: " + test_site
    ie = Watir::IE.start(test_site)

    Run(ie)
  end
end

, что сделает метод Run доступным для теста, а Run () найдет метод assert () в классе теста.

1 голос
/ 25 января 2011

Возможно, стоит попробовать удалить все вместе asserts и просто использовать .exists?.

...