2012-08-02 8 views

Odpowiedz

44

dla szyn 4, patrz this answer.

dla szyn 3.x, konfigurację rejestratora w config/environments/test.rb:

config.logger = Logger.new(STDOUT) 
config.logger.level = Logger::ERROR 

To będzie przeplatać żadnych błędów, które są rejestrowane w czasie badania do STDOUT . Możesz skierować wyjście do STDERR lub użyć innego poziomu logowania.

Wysłanie tych wiadomości zarówno do konsoli, jak i do pliku dziennika wymaga czegoś bardziej solidnego niż wbudowana klasa Ruby Logger. Klejnot logging zrobi, co chcesz. Dodaj go do Gemfile, a następnie skonfigurować dwa appenders w config/environments/test.rb:

logger = Logging.logger['test'] 
logger.add_appenders(
    Logging.appenders.stdout, 
    Logging.appenders.file('example.log') 
) 
logger.level = :info 
config.logger = logger 
+0

Dla szyn 4.2.1, musiałem ustawić poziom dziennika w konfiguracji, ponieważ był on nadpisywany w 'bootstrap.rb' w instancji modułu rejestrującego: https://github.com/rails/rails/blob/v4. 2.4/railties/lib/rails/application/bootstrap.rb # L70 Poziom dziennika został ustawiony w następujący sposób: 'config.log_level =: ERROR' – tommes

+0

@tommes czy możesz wysłać kolejną odpowiedź z dokładną nazwą pliku i kodem, który dodałeś? Zmodyfikuję swoją odpowiedź, aby określić, że jest przeznaczona dla Railsów 3.x. –

+0

zrobione! http://stackoverflow.com/a/32628272/1308089 – tommes

7

Można zdefiniować metodę w spec_helper.rb że wysyła wiadomość zarówno Rails.logger.info i put i użyć jej do debugowania:

def log_test(message) 
    Rails.logger.info(message) 
    puts message 
end 
+1

miałem nadzieję na coś zewnętrznego nazywając Rails.logger.info ponieważ używam Rails.logger.info, Rails.logger.debug itp w moim kod produkcyjny. dzięki za odpowiedź. – s12chung

+0

Rozumiem. Ale dlaczego to powstrzymuje cię od używania Rails.logger w twoich testach? – manglewood

+0

Używam go również w moich testach. Byłoby miło, gdyby wszystko zostało wydrukowane na standardowe wyjście, zamiast używania ogona. – s12chung

18

Rozwiązanie, które mi się podoba, ponieważ utrzymuje rspec wyjście oddzielone od rzeczywistych szyn dziennika jest wykonanie następujących czynności:

  • otworzyć drugie okno terminalu lub zakładki i zorganizować to tak, że można zobaczyć zarówno głównego terminalu używasz rspec na jak również nowy.
  • Uruchom polecenie ogonowe w drugim oknie, aby wyświetlić dzienniki szyn w środowisku testowym. Domyślnie może to być jak $ tail -f $RAILS_APP_DIR/logs/test.log lub tail -f $RAILS_APP_DIR\logs\test.log dla użytkowników okienne
  • uruchomić rspec apartamenty

Jeśli używasz terminala zespolonych jak iTerm, ten staje się jeszcze bardziej zabawa i trzeba rspec a wyjście test.log obok siebie.

26

Przenieś dziennik jako background job (&) i będzie on przeplatał z wyjściem rspec.

tail -f log/test.log & 
bundle exec rspec 
+4

To jest schludne rozwiązanie. – Gal

44

dla szyn 4.x poziom dziennika jest konfigurowany nieco inaczej niż w Rails 3.x

Dodaj to do config/environment/test.rb

# Enable stdout logger 
config.logger = Logger.new(STDOUT) 

# Set log level 
config.log_level = :ERROR 

Poziom rejestrator jest ustawiony na przykład rejestratora z config.log_level w: https://github.com/rails/rails/blob/v4.2.4/railties/lib/rails/application/bootstrap.rb#L70

zmienną środowiskową

Jako bonus, można zezwolić nadpisywania poziom dziennika przy użyciu zmiennej środowiskowej o wartości domyślnej:

# default :ERROR 
config.log_level = ENV.fetch("LOG_LEVEL", "ERROR") 

a następnie uruchomić testy z muszli:

# Log level :INFO (the value is uppercased in bootstrap.rb) 
$ LOG_LEVEL=info rake test 

# Log level :ERROR 
$ rake test 
Powiązane problemy