RSpecで画像をアップロードするAPIのテストを書く

Rack::Test::Methodsに含まれるRack::Test::UploadedFile.newを使う。Gemfile.lockを見れば分かるようにrack-testはデフォルトでRailsアプリケーションにインストールされている。

以下、grapeで作成した画像をアップロードするAPIに対する正常系のテストの例である。

describe Hoge::Image::CreateAPI, type: :request do
  describe 'POST /Image' do
    let(:path) { '/api/v1/image/' }

    let!(:user) { create(:user) }
    let!(:access_token) { user.activate.access_token }
    let(:valid_headers) { { 'Access-Token' => access_token } }

    context 'when param is valid' do
      let(:valid_params) do
        {
          image: {
            image: Rack::Test::UploadedFile.new('path/forTest.png', 'image/png')
          }
        }
      end

      it_behaves_like 'require_login', :post

      describe 'response' do
        before do
          post path, params: valid_params, headers: valid_headers
          @json = JSON.parse(response.body)
        end

        it 'returns 201' do
          expect(response.status).to eq(201)
        end

        it 'contains success message' do
          expect(@json['message']).to eq('Success')
        end
      end
    end
  end
end