Разве разрушать мои следы? - PullRequest
11 голосов
/ 18 ноября 2010

У меня есть тест, более или менее похожий на этот:

class FormDefinitionTest < ActiveSupport::TestCase
  context "a form_definition" do
    setup do
      @definition = SeedData.form_definition
      # ...

Я специально добавил где-то внизу

raise "blah"

, и я получаю эту ошибку:

RuntimeError: blah
test/unit/form_definition_test.rb:79:in `__bind_1290079321_362430'

когда я должен был что-то сделать:

/Users/pupeno/projectx/db/seed/sheet_definitions.rb:17:in `sheet_definition': blah (RuntimeError)
    from /Users/pupeno/projectx/db/seed/form_definitions.rb:4:in `form_definition'
    from /Users/pupeno/projectx/test/unit/form_definition_test.rb:79

Есть идеи, что дезинфицирует / разрушает мои следы?Я подозреваю, что следует, потому что когда исключение происходит внутри установки или должно происходить, когда это происходит.

Это проект Rails 3, на случай, если это важно.

Ответы [ 3 ]

1 голос
/ 30 октября 2012

Это потому, что метод musta #context генерирует код для вас. для каждого блока #should он генерирует для вас совершенно отдельный тест, например,

class FormDefinitionTest < ActiveSupport::TestCase
  context "a form_definition" do
    setup do
      @definition = SeedData.form_definition
    end

    should "verify some condition" do
      assert something
    end

    should "verify some other condition" do
      assert something_else
    end
  end
end

Затем #should сгенерирует два полностью независимых теста (для двух вызовов #should), один из которых выполняет

      @definition = SeedData.form_definition
      assert something

и еще один, который выполняет

      @definition = SeedData.form_definition
      assert something_else

Стоит отметить, что не генерирует один единственный тест, выполняя все три шага в последовательности.

Эти сгенерированные блоки кодов имеют имена методов, такие как _bind_ что-то, и сгенерированный тест имеет имя, которое является объединением всех имен контекстов, передаваемых в блок should, плюс строка, предоставленная блоком should (с префиксом "должен "). * * * * * * * * * * * * * * * * * * * * * * * * * * * *.

0 голосов
/ 04 мая 2012

Вы проверили config/initializers/backtrace_silencers.rb? Это точка входа для настройки этого поведения. С Rails.backtrace_cleaner.remove_silencers! вы можете очистить стек глушителей.

Более подробную информацию о ActiveSupport::BacktraceCleaner можно найти здесь .

0 голосов
/ 30 апреля 2012

Я думаю, что это даст вам обратную трассировку, которую вы хотите.Я не проверял его, но он должен работать:

def exclude_backtrace_from_location(location)
  begin
    yeild
  rescue => e
    puts "Error of type #{e.class} with message: #{e.to_s}.\nBacktrace:"
    back=e.backtrace
    back.delete_if {|b| b~=/\A#{location}.+/}
    puts back
  end
end

exclude_backrace_from_location("test/unit") do
  #some shoulda code that raises...
end
...