rspecを使った場合の画像アップロードのcontrollerのテスト

Paperclipを使って画像アップロードしている場合、コントローラのテストをどう書いたら良いのだろうか。今回はspec/fixtures以下にテスト用の画像があるとして、その書き方例を書く。

require 'rack/test'

describe PhotosController do
  describe "photo 投稿Form表示" do
     context "new method" do
       before do
         @user = User.find(1)
         allow(controller).to receive(:current_user) { @user }
         @albums = @user.albums
         allow(controller).to receive(:albums) { @albums }
         get :new
       end
       it { expect(@albums).not_to be_nil }
       it { expect(render_template('new')) }
       it { expect(render_with_layout('photo')) }
       it { expect(respond_with(200)) }
       it { expect(get: '/new').to route_to('photos#new') }
     end

     context "Photo投稿" do
       before do
         @user = User.find(1)
         allow(controller).to receive(:current_user) { @user }
         @albums = @user.albums
         @file =  Rack::Test::UploadedFile.new('spec/fixtures/test.png', 'image/png')
         post :create,  photo: { title: 'test photo', description: "これはテストです", user_id: 1, album_id: 1, photo: @file }
       end
       it { expect(render_with_layout('photo')) }
       it { expect(respond_with(302)) }
     end
   end
end