Railsでテストしよう!FileColumn&RMagickを使うモデルでファイルアップロードする方法&Fixtureで画像を登録する方法
Railsでのテストプログラミングシリーズ第二弾。
FileColumnを使っているモデルでは、RMagickを使ってversion管理してる画像についてはファルの有無がチェックされます。
そのため、Fixtureでファイル名だけを書いていても、テストでエラーがでることがあります。
またファイルアップロードもActionController::TestUploadedFile.newを使ったり、「[test][bug]Integration testの中でファイルアップロードができない」にある方法も使うという手段もあるようですが、FileColumnにはファイルアップロードのメソッドも用意されていました。
詳しくはvendor/plugins/file_column/lib/test_case.rbにいろいろと書いているのですが、ここではファイルアップロードの方法とFixtureで画像を登録する方法をまとめます。
ファイルアップロードの方法
これは簡単。
uploadというメソッドを使うだけ。
-
post :new, :file => upload "#{RAILS_ROOT}/public/images/rails.png"
ActionController::TestUploadedFile.newを使う場合はこんな感じなので、少し分かりやすくはなりますね。
-
post :new, :file => ActionController::TestUploadedFile.new "#{RAILS_ROOT}/public/images/rails.png"
Fixtureで画像を登録する方法
こちらはあらかじめRAILS_ROOT/test/以下にテスト用のファイルを用意しておいて、setup_fixture_filesでそれを適宜適切なディレクトリにコピーするという手段をとります。
モデル名がUser、FileColumnを使うテーブル名がimageの場合だと、以下の場所にテストデータを用意します。
-
RAILS_ROOT/test/fixtures/file_column/user/image/user_image.jpg
そして、UserモデルのFixtureで以下の様に定義して、
-
first:
-
image: user_image.jpg
UserControllerTestのsetupで以下の様にsetup_fixture_filesをよんでやります。
-
def setup
-
setup_fixture_files
-
@controller = CookingReportsController.new
-
@request = ActionController::TestRequest.new
-
@response = ActionController::TestResponse.new
-
end
これでOK!












この記事がお役に立ちましたら、一言コメントもらえると嬉しいですm_ _m