Как подавить трассировку огромного стека после неудачного теста TestTask? - PullRequest
8 голосов
/ 20 февраля 2011

Я настраиваю rakefile для проекта, и я определил некоторые rake TestTasks.Я запустил простой тест здравомыслия, который выполняет assert_equal(1, 2) только для проверки вывода, и, в дополнение к обычному выводу ошибки, я получаю этот беспорядок:

rake aborted!
Command failed with status (1): [/usr/bin/ruby -w -I"lib:." "/usr/lib/ruby/...]
/usr/lib/ruby/1.9.1/rake.rb:993:in `block in sh'
/usr/lib/ruby/1.9.1/rake.rb:1008:in `call'
/usr/lib/ruby/1.9.1/rake.rb:1008:in `sh'
/usr/lib/ruby/1.9.1/rake.rb:1092:in `sh'
/usr/lib/ruby/1.9.1/rake.rb:1027:in `ruby'
/usr/lib/ruby/1.9.1/rake.rb:1092:in `ruby'
/usr/lib/ruby/1.9.1/rake/testtask.rb:115:in `block (2 levels) in define'
/usr/lib/ruby/1.9.1/rake.rb:1110:in `verbose'
/usr/lib/ruby/1.9.1/rake/testtask.rb:100:in `block in define'
/usr/lib/ruby/1.9.1/rake.rb:634:in `call'
/usr/lib/ruby/1.9.1/rake.rb:634:in `block in execute'
/usr/lib/ruby/1.9.1/rake.rb:629:in `each'
/usr/lib/ruby/1.9.1/rake.rb:629:in `execute'
/usr/lib/ruby/1.9.1/rake.rb:595:in `block in invoke_with_call_chain'
/usr/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
/usr/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain'
/usr/lib/ruby/1.9.1/rake.rb:605:in `block in invoke_prerequisites'
/usr/lib/ruby/1.9.1/rake.rb:602:in `each'
/usr/lib/ruby/1.9.1/rake.rb:602:in `invoke_prerequisites'
/usr/lib/ruby/1.9.1/rake.rb:594:in `block in invoke_with_call_chain'
/usr/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize'
/usr/lib/ruby/1.9.1/rake.rb:588:in `invoke_with_call_chain'
/usr/lib/ruby/1.9.1/rake.rb:581:in `invoke'
/usr/lib/ruby/1.9.1/rake.rb:2041:in `invoke_task'
/usr/lib/ruby/1.9.1/rake.rb:2019:in `block (2 levels) in top_level'
/usr/lib/ruby/1.9.1/rake.rb:2019:in `each'
/usr/lib/ruby/1.9.1/rake.rb:2019:in `block in top_level'
/usr/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/usr/lib/ruby/1.9.1/rake.rb:2013:in `top_level'
/usr/lib/ruby/1.9.1/rake.rb:1992:in `run'
/usr/bin/rake:31:in `<main>'

Как от него избавиться?Я не хочу пролистывать последние 20 строк мусора, чтобы увидеть мои неудачные тесты.

Ответы [ 5 ]

3 голосов
/ 04 апреля 2011

У меня была та же проблема, что и у вас, и я решил ее путем обновления рейка: gem install rake

Это обновлено с того, что у меня было до 0.8.7.

Я использую 1.9.2-p180 (OS X, установленная с Homebrew) и выполняю тесты для недавно созданного проекта (сделанного с Hoe).

1 голос
/ 17 июня 2011

У меня все еще были нежелательные следы стека в рейке 0.8.7, обновление до 0.9.2 наконец помогло мне (ruby 1.9.2p180 [i386-mingw32] на Win7 32bit).

1 голос
/ 02 июня 2011

Rake не должен возвращать обратную трассировку в этой ситуации - ошибка связана с внешней командой, а не с внутренностями rake. Я отправил электронное письмо Джиму Вейриху по поводу следующего патча: https://gist.github.com/1003628

0 голосов
/ 20 февраля 2011

Рейк обычно не показывает обратный след, если вы не укажете --trace.Возможно, вы настроили Rake на постоянную работу в режиме --trace?

По умолчанию rake не распечатывает трассировку стека, если вы получаете ошибку в коде, который вызывает rake.Вы можете получить трассировку стека, запустив флаг --trace, но обычно я все равно предпочитаю его видеть.Вы можете сделать это, поместив Rake.application.options.trace = true в rakefile.

Если нет, вы можете попробовать установить Rake.application.options.trace = false в вашем Rakefile.

0 голосов
/ 20 февраля 2011

Посмотрите config/initializers/backtrace_silencers.rb

Вы должны быть в состоянии добавить что-то вроде

Rails.backtrace_cleaner.add_silencer { |line| line =~ %r{/usr/lib/ruby/1.9.1/rake.rb} }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...