Help us understand the problem. What is going on with this article?

画像アップロード CarrierWaveを使ったmodelのRSpecを通す

備忘録です。
今までActionDispatchを使ってRSpecで画像アップロードのテストを行っていたのですが、今回はCarrierWaveを使っていたのでmodelを通さなければいけない、createアクションで画像アップロードのテストをしたいと思ったので、試しにやってみました。

書き方はGitHubのwikiにありましたのでこちらを参考にしました。
URL: https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Use-test-factories

動作環境

  • Mac OSX EI Capitan 10.11.6
  • Ruby 2.3.4
  • Rails 5.1.1

FactoryGirl上で用意する

まずはbookモデルに対してFactoryで画像を用意する場合です。

こちらは参考にしたGitHubと同じ書き方です。

spec/factory/book.rb
FactoryGirl.define do
  factory :book, class: Book do
    id '1'
    title 'たのしいRuby'
    content 'ここが内容です'
    image Rack::Test::UploadedFile.new(File.join(Rails.root, 'spec/fixtures/image.jpg'))
    created_at '2016-01-01T00:00:00Z'
    updated_at '2016-01-02T00:00:00Z'
  end
end

spec/fixture配下の画像ファイルを用意している前提です。ここではimage.jpgを読み込んでいます。

作成した上記のfactoryをspec上で呼び出せばCarrierWaveで用意したImageUploaderモデルのカバレッジは通ると思います(未検証)。

spec上で用意する

specのcreateアクションに対して用意する場合です。

createなので基本的にはfactoryを用いずに直打ちでletを用意して行きます。

spec/book_spec.rb
describe 'POST create' do
  let(:image_path) { File.join(Rails.root, 'spec/fixtures/image.jpg') }
  let(:image) { Rack::Test::UploadedFile.new(image_path) }
  .
  .

  before do
    post :create, params: {
      book: {
        .
        .
        image: image
      }
    }
  end
.
.
.

こんな感じでいけます。

before以下は別として遅延評価letで用意するところだけを見れば良いです。

createする際にletで用意したimageを渡してあげればImageUploaderのカバレッジは通ります。

spec上で書いた場合はカバレッジ計測確認済です。

困った方はぜひ試してみてください。

ではでは。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした