как проверить размер файла в Rspec - PullRequest
0 голосов
/ 20 февраля 2019

Я новичок в Rspec.Я хотел бы проверить размер файла по изображению, которое превышает 10 МБ в каталоге fixtures.

user_spec.rb

require 'carrierwave/test/matchers'
...

it "is invalid avatar size" do
  image_path = File.join(Rails.root, "spec/fixtures/sample.jpg")
  user = FactoryBot.build(:user, avatar: File.open(image_path))
  user.valid?
  expect(user.errors[:avatar]).to include("should be less than 5MB")
end

фабрики / users.rb

FactoryBot.define do
  factory :user do
    name "Donald Fagen"
    username "donald"
    email "donald-fagen@gmail.com"
    password "Thenightfly"
    avatar { Rack::Test::UploadedFile.new(Rails.root.join('spec/fixtures/sample.jpg'), 'image/jpg') }
  end
end

user.rb

validate :avatar_size
...

private

  def avatar_size
    if avatar.size > 5.megabytes
      errors.add(:avatar, "should be less than 5MB")
    end
  end

Но возвращается

1) User validations test invalid information is invalid avatar size
     Failure/Error: expect(user.errors[:avatar]).to include("should be less than 5MB")
       expected [] to include "should be less than 5MB"

Похоже, что метод avatar_size не работает.Должен ли я сохранить после создания пользовательского объекта, чтобы перейти к avatar_size?Подскажите пожалуйста как проверить размер файла.

  • рельсы: 5.1.6
  • rspec-rails: 3.8.1
  • factory_bot_rails: 4.11.1

1 Ответ

0 голосов
/ 23 февраля 2019

проблема в данных образца.Это около 10 МБ, но я использую resize_to_fit: [300, 300], поэтому он сжат.Я проверил с помощью 'binding.pry', и он был меньше 5 МБ.

[3] pry(#<RSpec::ExampleGroups::User::ValidationsTest::InvalidInformation>)> @user.avatar.size
=> 43866
...