Зависание теста в Rails - как напечатать название теста перед выполнением? - PullRequest
26 голосов
/ 01 октября 2008

Я испытываю зависание в нашем приложении rails. Я не могу понять, какое из них (так как оно зависает и не попадает в отчет об ошибках). Я нашел это сообщение в блоге http://bmorearty.wordpress.com/2008/06/18/find-tests-more-easily-in-your-testlog/, в котором добавлена ​​настройка для печати названия теста, но когда я пытаюсь сделать то же самое, он выдает ошибку, сообщающую неверное количество аргументов для настройки (1 для 0). Буду признателен за любую помощь.

Ответы [ 6 ]

41 голосов
/ 20 апреля 2010

Если вы запустите тестирование с использованием rake, оно будет работать:

rake test:units TESTOPTS="-v" 
6 голосов
/ 01 октября 2008

Ответственность за печать названия теста лежит на TestRunner. Если вы запускаете тесты из командной строки, вы можете указать опцию -v, чтобы вывести имена тестовых примеров.

пример:

ruby test_Foo.rb -v
Loaded suite test_Foo
Started
test_blah(TestFoo): .
test_blee(TestFoo): .

Finished in 0.007 seconds.

2 tests, 15 assertions, 0 failures, 0 errors
4 голосов
/ 01 октября 2008

Это то, что я использую, в test_helper.rb

class Test::Unit::TestCase
  # ...

  def setup_with_naming 
    unless @@named[self.class.name]
      puts "\n#{self.class.name} "
      @@named[self.class.name] = true
    end
    setup_without_naming
  end
  alias_method_chain :setup, :naming unless defined? @@aliased
  @@aliased = true  
end

Переменная @@ aliased предотвращает повторный псевдоним, когда вы запускаете ее одновременно для нескольких файлов; @@ named предотвращает отображение имени перед каждым тестом (непосредственно перед первым запуском).

3 голосов
/ 01 октября 2008

Определение в сообщении блога является специфическим (метод setup (& block) определяется в модуле Thoughtbot :: Shoulda в context.rb. Shoulda.rb, затем TestCase расширяет этот модуль).

Определение для чистого теста :: единица:

# File test/unit/testcase.rb, line 100
      def setup
      end

что вы могли бы сделать

def setup
  log_test
end  

private   

def log_test   
  if Rails::logger  
    # When I run tests in rake or autotest I see the same log message multiple times per test for some reason.   
    # This guard prevents that.   
  unless @already_logged_this_test  
    Rails::logger.info "\n\nStarting #{@method_name}\n#{'-' * (9 + @method_name.length)}\n"  
  end  
  @already_logged_this_test = true  
end 

редактировать

если вы действительно не хотите редактировать свои файлы, вы можете рискнуть открыть тестовый кейс и вместо этого продлить выполнение:

class Test::Unit::TestCase   
  alias :old_run :run
  def run 
    log_test
    old_run
  end
end

это должно работать (хотя у меня нет рубина для тестирования)


Я сдаюсь! (в отчаянии)

Я проверил код, и rails на самом деле творит чудеса за сценой, поэтому, вероятно, переопределение run не работает.

Дело в том, что частью волшебства является ActiveSupport :: CallBack и создание обратных вызовов для настройки и демонтажа.

что означает

class Test::Unit::TestCase
  setup :log_test  

  private   

  def log_test   
    if Rails::logger  
      # When I run tests in rake or autotest I see the same log message multiple times per test for some reason.   
      # This guard prevents that.   
      unless @already_logged_this_test  
        Rails::logger.info "\n\nStarting #{@method_name}\n#{'-' * (9 + @method_name.length)}\n"  
      end  
      @already_logged_this_test = true  
    end  
  end  
end

определенно должно работать

и запуск тестов с ним действительно работает. я запутался в том, что это первое, что я попробовал, и он потерпел неудачу с той же ошибкой, которую вы получили

0 голосов
/ 30 июня 2018

Если у кого-то есть такая же проблема, но с интеграционными тестами и автономным веб-сервером, следующий код ruby ​​распечатает тестовое имя файла перед его запуском

Dir["test/integration/**/*.rb"].each do |filename|
  if filename.include?("_test.rb")
    p filename
    system "xvfb-run rake test TEST=#{filename}"
  end
end
0 голосов
/ 01 октября 2008

Какой тестовый фреймворк вы используете? Test / Unit

Я бы взглянул на RSpec, который предоставил бы немного больше контекста для ваших тестов. Вы также можете получить хороший HTML-отчет, который выглядит следующим образом:

Результат RSpec http://myskitch.com/robbyrussell/rspec_results-20070801-233809.jpg

Если бы у вас были какие-либо неудачные тесты, конкретный тест был бы красным и расширился бы до определенных строк, где тест не удался, чтобы вы могли лучше понять, почему тест не прошел и где вы должны искать решение проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...