rspecを使ってコントローラのテストを書く際、ファイルのアップロードを試したいことがあります。
頑張ってActionDispatch::Http::UploadedFile.new()などとしても、stringに変換されてしまうのでダメですね。
<%= form_for @user do |f| %>
<%= f.text_field :name %>
<%= f.file_field :image %>
<% end %>
上記のようなHTMLを、rspecでシミュレートするには、以下のようにします。
Rails 3.1の環境で試しました。
describe UsersController do
  describe “POST users” do
    it “should be successful” do
      filepath = ‘/home/baba/avatar.jpg’
      post ‘create’, {
        ‘user’ => {
          :name => ‘Takao Baba’,
          :image => fixture_file_upload(filepath, ‘image/jpg’),
        }
      }
      response.response_code.should == 201
    end
  end
end
fixture_file_uploadで、第1引数にファイルパス、第2引数にMIMEタイプを入れれば、アクションが受け取れるようにしてくれます。
 
      