2012-02-07

sinatraでファイルアップロードのテストをする

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
sinatraでファイルをアップロードさせるよなアプリのテストをする場合です。

ファイルアップロードは、以下が参考になります。
http://d.hatena.ne.jp/yamamucho/20100620/1277003595

抜粋かつちょっと改造ですが、こんな感じでfileという名前のパラメータでファイルを受け取るとします。
require 'rubygems'
require 'sinatra'

post '/upload' do
  if params[:file]
    content_type params[:file][:type]
    f = params[:file][:tempfile]
    f.read f.size
  end
end

このようなアプリのテストをする場合は、以下のような感じです。 rspecでテストする場合は、以下のような感じです。
require 'rubygems'
it "アップロードしたらファイルの中身が帰ってくる" do
  upload_file = File.dirname(__FILE__) + "/foo.txt"
  post_file   = Rack::Test::UploadedFile.new(upload_file)
  post "/upload", "file" => post_file
  last_response.body.should == "foo"
end


コメントを投稿