2015-06-04 9 views
13

Ich schreibe Tests einiger Elixir-Code, der mit SSH interagiert. In meinen Tests möchte ich einen SSH-Server starten, auf dem ich meinen Code ausführen kann. Ich würde es vorziehen, diesen Code in einer eigenen Datei im Testverzeichnis zu speichern und durch verschiedene Tests importieren zu lassen.Importieren von Testcode in Elixier-Unit-Test

Ich konnte dies jedoch nicht zu gut funktionieren.

Ich habe versucht, einen SSHServer Modul eine test/ssh_server.ex Datei erstellt enthält, aber wenn ich import SSHServer meine Tests hinzufügen, erhalte ich:

(CompileError) Test/end_to_end_test.exs: 13: Modul SSHServer nicht ist geladen und konnte nicht gefunden werden

Fehle ich etwas? Gibt es eine Möglichkeit, mix test zu zwingen, meine Datei test/ssh_server.ex zu importieren?

Antwort

13

haben, um dieses ich zur Zeit habe manuell den Code aus meiner test_helper.exs Datei laden:

Code.load_file("test/ssh_server.ex") 
+10

Dies ist eine gute Lösung durchgeführt werden. Ich würde auch die Datei '.exs' nennen, da sie nie kompiliert wird. Eine andere Alternative ist, Mix anzuweisen, alles in einem speziellen Verzeichnis zu kompilieren, wie zum Beispiel test/support. Phoenix macht das hier: https://github.com/phoenixframework/phoenix/blob/db2f953f24973fab8aa2aab3bd8fc9c87a17adc8/installer/templates/new/mix.exs#L10 –

+0

Ich benutze dies für das Seeding vor Tests mit 'Code.load_file (" priv /repo/seeds.exs ")' in meinem Test 'setup' und es funktioniert wie ein Zauber. – ibgib

+2

Ich würde mit 'Code.require_file' statt laden gehen. Dadurch wird sichergestellt, dass die Datei nur einmal geladen wird. Ich stimme auch der Verwendung der Erweiterung ".exs" zu. Das ist der Weg, wie ecto es tut: https://github.com/elixir-ecto/ecto/blob/master/test/ecto/test_helper.exs –