Techioz Blog

Railsでアップロードされたバイナリポストファイルをテストするにはどうすればよいですか?

概要

現在、アップロードされたファイルが元のファイルと同じかどうかをテストしています。 API では、アップロード本文が multipart/form-data ではなく、バイナリである必要があります。

これが仕様です:

  it "uploads" do
    fixture_path = Rails.root.join("spec/fixtures/")
    fixture_file = fixture_path.join("landscape.jpg")
    file = Rack::Test::UploadedFile.new(fixture_file, "image/jpeg", :binary)
    post api_upload_upload_path, file, header
    assert_response :success
  end

仕様を実行すると失敗します。

Failures:

  1) Api::V1::UploadController uploads
     Failure/Error: post api_upload_upload_path, file, company_header
     ArgumentError:
       invalid %-encoding (These are bad characters

これを修正するにはどうすればよいですか? または、この種のアクションをテストするより良い方法はありますか?

解決策

分かりました。ブラウザが画像を投稿しにくいからです。 AngularJS はそれを multipart/form-data に置きます。