以下のようなアップロードしたファイルを/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 件のコメント:
コメントを投稿