Szukałem tego pytania i nie mogłem go znaleźć ani odpowiedzi na Stack Overflow, ale znalazłem je gdzie indziej, więc proszę o udostępnienie go na SO.
Framework rails posiada funkcję fixture_file_upload
( Rails 2 Rails 3 , Rails 5 ), która przeszuka katalog fixtures w poszukiwaniu określonego pliku i udostępni go jako plik testowy dla kontrolera podczas testów funkcjonalnych. Aby z niego skorzystać:
1) Umieść plik do przesłania do testu w podkatalogu fixtures / files do testów.
2) W swoim teście jednostkowym możesz pobrać plik testowy, wywołując fixture_file_upload („path”, „mime-type”).
na przykład:
bulk_json = fixture_file_upload('files/bulk_bookmark.json','application/json')
3) wywołaj metodę post, aby wykonać żądaną akcję kontrolera, przekazując obiekt zwrócony przez fixture_file_upload jako parametr do załadowania.
na przykład:
post :bookmark, :bulkfile => bulk_json
Lub w Rails 5: post :bookmark, params: {bulkfile: bulk_json}
Spowoduje to przeprowadzenie symulowanego procesu końcowego przy użyciu kopii pliku Tempfile pliku w katalogu urządzeń, a następnie powrót do testu jednostkowego, aby można było rozpocząć badanie wyników wiadomości.
Odpowiedź Mori jest poprawna, z tym wyjątkiem, że w Railsach 3 zamiast "ActionController :: TestUploadedFile.new" musisz użyć "Rack :: Test :: UploadedFile.new".
Utworzony obiekt pliku może być następnie użyty jako wartość parametru w testach Rspec lub TestUnit.
źródło
Myślę, że lepiej jest użyć nowego ActionDispatch :: Http :: UploadedFile w ten sposób:
W ten sposób możesz użyć tych samych metod, których używasz w swoich walidacjach (jak na przykład plik tymczasowy).
źródło
Z książki Rspec, B13.0:
Rails udostępnia klasę ActionController :: TestUploadedFile, której można użyć do reprezentowania przesłanego pliku w skrócie parametrów specyfikacji kontrolera, na przykład:
Ta specyfikacja wymagałaby posiadania obrazu test_avatar.png w katalogu spec / fixtures. Musiałby pobrać ten plik, przesłać go do kontrolera, a kontroler utworzyłby i zapisałby prawdziwy model użytkownika.
źródło
Chcesz użyć fixtures_file_upload . Umieścisz plik testowy w podkatalogu katalogu fixtures, a następnie przekażesz ścieżkę do pliku fixtures_file_upload. Oto przykład kodu wykorzystującego przesyłanie pliku ustawień
źródło
Jeśli używasz domyślnych szyn, przetestuj z dziewczyną z fabryki. Dobrze poniżej kodu.
Uwaga: będziesz musiał zachować fikcyjny obraz w
/test/images/100_100.jpg
.Działa doskonale.
Twoje zdrowie!
źródło
jeśli otrzymujesz plik w kontrolerze z następującym
następnie spróbuj wykonać następujące czynności w swoich specyfikacjach:
Spowoduje to, że fałszywa metoda stanie się metodą „tempfile”, która zwróci ścieżkę do załadowanego pliku.
źródło