2016-06-05 12 views
7

Tworzę formułę Homebrew dla biblioteki C, która zawiera własny zestaw testów. Jako część bloku test chciałbym uruchomić testy dołączone do pobranych plików. Testy są uruchamiane jako docelowe (make)(). Jednak bloki Homebrew test działają w swoich własnych katalogach tymczasowych, a pobrane pliki nie znajdują się na ścieżce. Oznacza to, że po nie działa, ponieważ nie może znaleźć pliki:Dostęp do pobranych plików w bloku testowym formuły

test do 
    system "make", "test" 
end 

Jak mogę uzyskać dostęp do lokalizacji w jakiej zostały pierwotnie pobrane i rozpakowane? Nie znalazłem żadnych informacji na ten temat w dokumentach. Czy jest w tym przypadku lepsze rozwiązanie testów Homebrew?

+1

powinienem być w stanie uzyskać dostęp do rzeczywistej archiwum z 'self.cached_download', ale mam wrażenie, że tarball jest rozpakowywany w katalogu tymczasowym, w którym odbywa się kompilacja, co oznacza, że ​​musiałbym rozpakować go ponownie w' teście'. Sądzę, że to nie jest takie złe, ale wciąż jest do bani. –

+0

Ugh, ale jeśli zrobię to w ten sposób, będę musiał przeanalizować wszystkie rzeczy napisane do STDOUT, aby sprawdzić, czy któraś z kontroli nie powiodła się, tak że mogę zwrócić wartość boolean. (Chyba że całkowicie nie rozumiem, jak działa blok 'test'.) –

Odpowiedz

1

Blok test do służy do sprawdzenia, czy formuła została poprawnie zainstalowana, aby nie uruchamiać kombinezonów testowych. Jeśli testy nie trwają zbyt długo, można uruchomić je jako część instalacji:

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

Aby odpowiedzieć na to pytanie nie ma niezawodny sposób na uzyskanie oryginalnego katalogu rozpakowane ponieważ zniszczyła po instalacji, a użytkownik może mieć usunął buforowany plik (np. brew cleanup), więc musisz go ponownie pobrać.

Rozwiązaniem jest, aby skopiować niezbędne pliki testowe gdzieś podczas etapu install następnie wykorzystać je bezpośrednio lub skopiować je w bieżącym katalogu, podczas testowania, np:

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