Подтвердить что ты не робот

Rails test hang - как я могу распечатать тестовое имя перед исполнением?

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

4b9b3361

Ответ 1

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

rake test:units TESTOPTS="-v" 

Ответ 2

Печать тестового имени лежит на 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

Ответ 3

Это то, что я использую в 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 позволяет отображать имя перед каждым тестом (непосредственно перед первым запуском).

Ответ 4

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

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

# 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

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


Я сдаюсь! (в расстройстве)

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

Дело в том, что часть магии включает в себя 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

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

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

Ответ 5

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

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

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

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

Ответ 6

Спасибо всем за помощь, я закончил тестирование и добавил вызов log_name в каждом из методов настройки для каждого тестового файла до того, как появились эти последние ответы на пару. Еще раз спасибо.