以下のようなアップロードしたファイルを/tmpの下に保存するコントローラーがあるとします。
class TestController < ApplicationController def index end def upload file=params[:file]['csv'] @filename = params[:file]['csv'].original_filename File.open("/tmp/#{@filename}","wb"){ |f| f.write(file.read) } end endこのコントローラー用のviewを以下のような感じで用意します。
<% form_tag({:action => 'upload'},{:class=>'form',:multipart=>true}) do %> <%= file_field "file","csv" %> <%= submit_tag("upload") %> <% end %>specファイルは以下のような感じになります。
describe TestController do describe "fileをポストする" do before(:each) do @file = fixture_file_upload "test.csv", "text/comma-separated-values" post 'upload',:file => {"csv"=>@file} end after(:each) do File.delete("/tmp/test.csv") end it "/tmpにファイルが保存される" do FileTest.exist?("/tmp/test.csv").should be_true end end endファイルアップロードのテストにはfixture_file_uploadを使うようです。
fixture_file_uploadで指定するファイルは
spec/fixtures/
にあると見なされるようです。
viewで
file_field "file","csv"
とした部分は
post 'upload',:file => {"csv"=>@file}
と指定すればよいようです。
0 件のコメント:
コメントを投稿