2016-06-05 3 views
7

Ich erstelle eine Homebrew-Formel für eine C-Bibliothek, die eine eigene Testsuite enthält. Als Teil des Blocks test für die Formel möchte ich die Tests ausführen, die den heruntergeladenen Dateien beiliegen. Die Tests laufen als make Target (make test). Homebrew test Blöcke laufen jedoch in ihrem eigenen temporären Verzeichnis und die heruntergeladenen Dateien befinden sich nicht im Pfad. Das heißt, die folgende nicht funktionieren, da es die Dateien nicht finden kann:Greifen Sie auf heruntergeladene Dateien im Testblock einer Formel zu

test do 
    system "make", "test" 
end 

Wie kann ich den Speicherort zugreifen, in denen die Dateien ursprünglich heruntergeladen wurden und ausgepackt? Ich konnte keine Informationen darüber in den Dokumenten finden. Oder gibt es in diesem Fall eine bessere Lösung für Homebrew-Tests?

+1

Ich sollte die tatsächliche Tarball zugreifen können mit 'selfcached_download', aber ich habe das Gefühl, dass der Tarball im temporären Verzeichnis entpackt wird, in dem der Build stattfindet, was bedeutet, dass ich ihn erneut in' test' entpacken müsste. Ich denke, das ist nicht * so * schlecht, aber es ist immer noch irgendwie scheiße. –

+0

Ugh, aber wenn ich es so mache, muss ich alle in STDOUT geschriebenen Dinge analysieren, um zu sehen, ob einer der Checks fehlgeschlagen ist, so dass ich einen booleschen Wert zurückgeben kann. (Es sei denn, ich missverstehe völlig, wie der Testblock funktioniert.) –

Antwort

1

Der test do Block soll testen, ob eine Formel richtig installiert wurde, keine Testanzüge. Wenn die Tests nehmen Sie nicht zu lange können Sie sie als Teil des Laufes installieren:

def install 
    # ... 
    system "make", "test" 
    # ... 
end 

Um Ihre Frage zu beantworten, gibt es keine zuverlässige Möglichkeit, die Original-entpackten Verzeichnis zu erhalten, weil es zerstört wird nach der Installation und der Benutzer kann den zwischengespeicherten Tarball gelöscht (mit zB brew cleanup), damit du ihn erneut herunterladen musst.

Eine Lösung ist, die notwendigen Testdateien irgendwo während des install Schritt dann nutzen sie direkt oder kopieren Sie sie im aktuellen Verzeichnis zu kopieren, wenn die Prüfung, zum Beispiel:

def install 
    # ... 
    libexec.install "tests" 
end 

test do 
    cp_r (libexec/"tests"), "." 
    cd "tests" do 
    # I’m assuming the Makefile's paths can be given 
    # as variables here. 
    system "make", "test", "LIB=#{lib}", "INCLUDE=#{include}" 
    end 
end