Как я могу получить сообщения журнала в файл при тестировании контроллера с rspec? - PullRequest
0 голосов
/ 13 января 2012

Я использую Rspec2 с Watchr для проверки сообщения на контроллере, например так:

...
 post :add_item, :add_item=> { "price" => price.to_s, "product_line" => line }
 # puts " response: "  + response.body
 response.should be_success
...    

Я получаю ответ, и он выглядит хорошо, но по какой-то причине этот не даетмне ответ "успех".Я пытаюсь понять, почему.Для этого было бы очень полезно, если бы я мог видеть свои журналы.Я вижу, что журналы инициализируются и указывают на правильное место, потому что, когда мой env запускается, у меня есть это:

Loading environment: test
Logger: #<ActiveSupport::BufferedLogger:0xa201b24 @level=0, @buffer={},         
  @auto_flushing=1, @guard=#<Mutex:0xa201728>, 
  @log=#<File:/mnt/hgfs/the_app/log/test.log>, @namespace="">
Database: the_app_test

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

logger.debug "Params #{params.inspect}" (эта строка находится сразу после def в контроллере)

Я проверил свои окружающие rb-файлы и не вижувсе, что могло бы объяснить это.Есть ли способ получить сообщения, сгенерированные контроллерами rspec, для перехода в их собственный файл журнала?Rspec перенаправляет мой вывод логирования?

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

1 Ответ

0 голосов
/ 13 января 2012

Быстрый, но уродливый способ: поместите logger = Rails::logger в начало вашего метода контроллера. Не уверен, что это нарушит нормальное ведение журнала.

и поставить

config.before(:suite) do
Rails::logger  =
    ActiveSupport::BufferedLogger.new(File.join(Rails.root,
    "log", "rspec_env_#{Rails.env}.log"),
    ActiveSupport::BufferedLogger::Severity::DEBUG)

в моем spec_helper.rb. Эти два приведут к тому, что вызовы логгера rspec перейдут на rspec_env_test.log и т. Д.

У кого-нибудь есть способ получше?

...