3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[RSpec] 画像投稿機能 モデルスペック をかく (ActiveStorageの場合)

Last updated at Posted at 2021-05-05

###目的
Railsアプリの開発中に、Model側でも画像データのバリデーションが有効か調べる。

###前提

  • Rails に ActiveStorage 導入済
  • Rails に RSpec・FactoryBot 導入済
  • model spec 作成済
Format
- (削除箇所)
+ (追加箇所)

####開発環境

  • Rails 6.1.3
  • Ruby 2.7.3
  • AWS Cloud9 (Ubuntu 18.04.5)
  • RSpec 3.10 (rspec-rails 4.0.2)
    • FactoryBot
ディレクトリ構成
myapp
├── app ── models
(省略)
├── spec
      ├── factories
      ├── fixtures
      └── models
(省略)
└── (省略)

###設定

  • rails_helper.rb の設定
spec/rails_helper.rb
(省略)
RSpec.configure do |config|
  (省略)
  + config.include ActionDispatch::TestProcess::FixtureFile
end

他の先駆者の方の設定方法もありますので、参考URLもあわせてご覧ください。(私の場合は下記の参考URLの方法ではなぜか解決できませんでした...)

###ディレクトリ作成

Terminal
$ mkdir -p spec/fixtures/files/image

上記で作成するディレクトリ'files'は、後ほどテストで実行するfixture_file_uploadメソッドのルートディレクトリとなります。

###テストデータ作成

先ほど作成したディレクトリにテスト用のデータを作成。

  • ファイルのサイズを指定してダミーデータ作成(下記の例は jpeg 6MB)
Terminal
$ dd if=/dev/zero of=/home/ubuntu/environment/myapp/spec/fixture/image-test-6mb.jpeg bs=1M count=6

ddコマンド ダミーデータ生成 - Qiita
dd コマンド – ファイルをコピー | Linuxコマンド.NET

###モデル側の検証

app/models/post.rb
class Post < ApplicationRecord
  has_one_attached :image
  validates :content, presence: true
  + validates :image, size: { less_than: 5.megabytes, \
                            message: "should be less than 5MB" }
end

テストを書く

spec/factories/posts.rb
FactoryBot.define do
  factory :post do
    id { 1 }
    content { "Good" }
  end
end

spec/models/post_spec.rb
require 'rails_helper'

RSpec.describe Post, type: :model do
  # 6MB以上の画像アップロードは無効であること  
  it "is invalid with an image data greater then 6MB" do
    post = FactoryBot.build(:post)
    post.image = fixture_file_upload("image/image_test_6mb.jpeg")
    expect(post.valid?).to eq false
  end
end

###単体テスト実行

Terminal
$ bin/rspec spec/models/posts.rb

###参考URL

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?