Tech Racho エンジニアの「?」を「!」に。
  • 開発

Rails 3 + rspecでファイルのアップロードをテストする

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タイプを入れれば、アクションが受け取れるようにしてくれます。


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。