2017-12-27 21 views
0

Ich frage mich, wie Sie die Anmeldung in Elixir beim Testen deaktivieren. In meinem aktuellen Code teste ich Logger-Nachrichten, also möchte ich sie nicht komplett deaktivieren, sondern die Nachrichten ausblenden, bis ein Test aufhört zu passieren.Unterdrücken Logger beim Testen

Ich verwende Mix und ExUnit, um mein Projekt zu verwalten und zu testen.

mix test 
Compiling 2 files (.ex) 
......... 
17:59:18.446 [warn] Code seems to be empty 
. 
17:59:18.447 [warn] Code doesn't contain HLT opcode 
. 
17:59:18.448 [warn] Code doesn't contain HLT opcode 

17:59:18.448 [error] Label error doesn't exist 
..... 

Finished in 0.07 seconds 
16 tests, 0 failures 

Antwort

3

In deine config/test.exs Datei setzen die folgende Konfiguration für den Logger:

config :logger, level: :error 

Wenn Sie nicht umgebungsspezifischen Konfigurationen haben, legen Sie die folgende Zeile in der config/config.exs:


Eine andere Möglichkeit wäre eine andere Backend für die Log-Meldungen zu verwenden (unter der Annahme {:logger_file_backend, "~> 0.0"} in deps Abschnitt mix.exs enthalten):

config :logger, 
    compile_time_purge_level: :debug, 
    format: "$date $time $metadata[$level] $message\n", 
    metadata: [:application, :module, :function, :file, :line], 
    backends: [{LoggerFileBackend, :info_warn_error}] 

config :logger, :info_warn_error, 
    path: "log/info_warn_error.log", # or "/dev/null" 
    level: :warn 
+0

Ich habe nicht erwähnt, aber ich habe versucht, mit der ersten Möglichkeit und es erhalten Fehler, und Tests basierend auf Warnung gestoppt zu übergeben. Der zweite Weg ist mehr oder weniger das Gleiche, also werde ich versuchen, ein eigenes Backend hinzuzufügen oder es einfach so zu lassen, wie es ist. Wie auch immer, danke für deine Antwort. – Jump3r

+0

Das einzige Backend mit dem Pfad '/ dev/null' ist _exactly_ was Sie wollen: Es unterdrückt jegliche Ausgabe an alle Stellen (einschließlich der Konsole), aber es lässt den 'gen_event' Server des Loggers aktiv, so dass Sie alles was Sie wollen testen können. _Sidenote: _ Ich finde es seltsam, dass Sie Fehler unterdrücken möchten. – mudasobwa

+0

Nun, ich denke, das ist nicht seltsam, wenn Sie anfangen, auf Fehler zu testen. Wenn Sie wie 10-15 Tests dafür schreiben, wird es wirklich nervig, alle Fehlermeldungen zu sehen, die erwartet werden. – Jump3r

0

I remove_backend() Funktion in Loggers docs gesichtet, so dass nach Logger.remove_backend(:console) in Datei mit dem Logger sollte deaktiviert sein, jede geloggte Nachricht ist weg (Tests passieren übrigens).

EDIT: Ich fragte Logger Entwickler diese Frage. Anscheinend ist es besser, @moduletag :capture_log oben auf dem Test zu verwenden, als Backend zu entfernen. Wie auch immer, funktioniert, so gut für mich.

+0

Wahrscheinlich nicht die beste Idee. Sie entfernen jede Protokollierung - Testlauf oder anderweitig. Das willst du wahrscheinlich nicht tun. –

Verwandte Themen