Подавление трассировки стека, когда Rails тестирует ошибку - PullRequest
1 голос
/ 03 февраля 2011

Я новичок в Ruby on Rails и пишу тесты.Некоторые из них генерируют исключения;Я хотел бы, чтобы вывод "rake test" выдал мне сообщение об ошибке исключения, но не всю обратную трассировку.(Я хотел бы написать тесты, которые выполняют нереализованные функциональные возможности, которые я затем заполню.)

Например, фактический вывод:

Started
E
Finished in 0.081054 seconds.

  1) Error:
test_should_fail(VersioningTest):
ActiveRecord::StatementInvalid: PGError: ERROR:  null value in column "client_ip" violates not-null constraint
: INSERT INTO "revisions" ("created_at", "id") VALUES ('2011-02-03 20:14:17', 980190962)
    /Users/rpriedhorsky/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract_adapter.rb:202:in `rescue in log'
    /Users/rpriedhorsky/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract_adapter.rb:194:in `log'
    /Users/rpriedhorsky/.rvm/gems/ruby-1.9.2-p136/gems/activerecord-3.0.3/lib/active_record/connection_adapters/postgresql_adapter.rb:496:in `execute'
    [... etc. etc. etc. ...]

1 tests, 0 assertions, 0 failures, 1 errors, 0 skips

Желаемый вывод:

Started
E
Finished in 0.081054 seconds.

  1) Error:
test_should_fail(VersioningTest):
ActiveRecord::StatementInvalid: PGError: ERROR:  null value in column "client_ip" violates not-null constraint

1 tests, 0 assertions, 0 failures, 1 errors, 0 skips

Я нашел информацию ( например ) в противоположном направлении, но не о подавлении следов стека.

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

Этобыло бы неплохо их легко включать и выключать;как указано ниже, иногда они полезны для отслеживания ошибок.

1 Ответ

1 голос
/ 03 февраля 2011

Вы можете взглянуть на «глушители обратного следа» - для меня (Rails 2.3.8) это файл config / initializers / backtrace_silencers.rb:

# Be sure to restart your server when you modify this file.

# You can add backtrace silencers for libraries that you're using but
# don't wish to see in your backtraces.
# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }

# You can also remove all the silencers if you're trying do debug a
# problem that might steem from framework code.
# Rails.backtrace_cleaner.remove_silencers!

Rails.backtrace_cleaner.add_silencer {|line| line =~ /gems/}
Rails.backtrace_cleaner.add_silencer {|line| line =~ /passenger/}

Похоже, вы должны иметь возможность поставить строку, как

Rails.backtrace_cleaner.add_silencer {|line| true}

В вашем файле config / environment / test.rb, и это уничтожило бы ваши следы (хотя это могло бы просто применяться к регистратору - я не очень знаком с методом).

Но спросите себя - вы действительно хотите полностью избавиться от следов? Они могут быть очень полезны для отслеживания ошибок ...

...