Зависание теста в Rails - как напечатать название теста перед выполнением?

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

26
задан Bill the Lizard 1 October 2008 в 14:33
поделиться

5 ответов

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

rake test:units TESTOPTS="-v" 
42
ответ дан 28 November 2019 в 06:55
поделиться

Печать тестового имени является ответственностью 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
6
ответ дан Aaron Hinni 1 October 2008 в 14:33
поделиться

Это - то, что я использую в 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

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

4
ответ дан Ben Scofield 1 October 2008 в 14:33
поделиться
  • 1
    Я объяснил экранную высоту в своем ответе. Это обычно хорошо работает для меня, но можно быть корректными в этом эти 1000vh, более вероятно, будет работать на большие элементы. – Nathan Powell 22 September 2016 в 16:13

Какую среду тестирования Вы используете? Тест/Единица?

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

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

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

0
ответ дан mwilliams 1 October 2008 в 14:33
поделиться
  • 1
    Если Вы могли бы объяснить, почему downvote, я мог изучить, почему я неправ и делаю это лучше в следующий раз. Это помогло бы мне много. Спасибо:) – Timbergus 8 November 2016 в 12:21

Определение в сообщении в блоге, должен иметь конкретный (установка (& блок), метод определяется в модуле Thoughtbot:: Должен иметь в context.rb., должен have.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

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

<час>

я сдаюсь! (в разочаровании)

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

вещь: часть волшебства включает 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

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

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

3
ответ дан Jean 1 October 2008 в 14:33
поделиться
  • 1
    Я думаю @Timmmm' s точка there' s ничто волшебное о 50 здесь. Это работает только в результате Jeremy Cook' s отвечают для использования большого значения; 40vh или 60vh или 1000vh все работал бы точно также на типичное (т.е. небольшой) элемент. – mahemoff 11 January 2017 в 19:51
Другие вопросы по тегам:

Похожие вопросы: