Mencari pertanyaan ini dan tidak dapat menemukannya, atau jawabannya di Stack Overflow, tetapi menemukannya di tempat lain, jadi saya meminta untuk membuatnya tersedia di SO.
Kerangka kerja rel memiliki fungsi fixture_file_upload
( Rails 2 Rails 3 , Rails 5 ), yang akan mencari direktori perlengkapan Anda untuk file yang ditentukan dan akan membuatnya tersedia sebagai file uji untuk pengontrol dalam pengujian fungsional. Untuk menggunakannya:
1) Letakkan file Anda untuk diunggah dalam pengujian di subdirektori perlengkapan / file Anda untuk pengujian.
2) Dalam pengujian unit Anda, Anda bisa mendapatkan file pengujian dengan memanggil fixture_file_upload ('path', 'mime-type').
misalnya:
bulk_json = fixture_file_upload('files/bulk_bookmark.json','application/json')
3) panggil metode posting untuk menekan aksi pengontrol yang Anda inginkan, meneruskan objek yang dikembalikan oleh fixture_file_upload sebagai parameter untuk unggahan.
misalnya:
post :bookmark, :bulkfile => bulk_json
Atau di Rails 5: post :bookmark, params: {bulkfile: bulk_json}
Ini akan dijalankan melalui proses posting yang disimulasikan menggunakan salinan Tempfile dari file di direktori perlengkapan Anda dan kemudian kembali ke pengujian unit Anda sehingga Anda dapat mulai memeriksa hasil posting.
Jawaban Mori benar, kecuali di Rails 3 dan bukan "ActionController :: TestUploadedFile.new" Anda harus menggunakan "Rack :: Test :: UploadedFile.new".
Objek file yang dibuat kemudian dapat digunakan sebagai nilai parameter dalam pengujian Rspec atau TestUnit.
sumber
Saya pikir lebih baik menggunakan ActionDispatch :: Http :: UploadedFile baru dengan cara ini:
Dengan cara ini Anda dapat menggunakan metode yang sama dengan yang Anda gunakan dalam validasi Anda (seperti misalnya tempfile).
sumber
Dari The Rspec Book, B13.0:
Rails 'menyediakan kelas ActionController :: TestUploadedFile yang dapat digunakan untuk merepresentasikan file yang diunggah dalam hash params dari spesifikasi pengontrol, seperti ini:
Spesifikasi ini mengharuskan Anda memiliki gambar test_avatar.png di direktori spec / fixture. Ini akan mengambil file itu, mengunggahnya ke pengontrol, dan pengontrol akan membuat dan menyimpan model Pengguna yang sebenarnya.
sumber
Anda ingin menggunakan fixture_file_upload . Anda akan meletakkan file tes Anda di subdirektori dari direktori perlengkapan dan kemudian meneruskan di jalur ke fixture_file_upload. Berikut adalah contoh kode , menggunakan upload file fixture
sumber
Jika Anda menggunakan uji rel default dengan gadis pabrik. Baik di bawah kode.
Catatan: Anda harus menyimpan gambar tiruan
/test/images/100_100.jpg
.Ini bekerja dengan sempurna.
Bersulang!
sumber
jika Anda mendapatkan file di pengontrol Anda dengan yang berikut ini
kemudian coba yang berikut ini dalam spesifikasi Anda:
Ini akan membuat metode palsu menjadi metode 'tempfile', yang akan mengembalikan jalur ke file yang dimuat.
sumber