如何在Rspec中测试文件大小

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Rspec中测试文件大小相关的知识,希望对你有一定的参考价值。

我是Rspec的新手。我想通过fixtures目录中超过10Mb的图像测试文件大小。

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吗?请告诉我如何检查文件大小。

  • rails:5.1.6
  • rspec-rails:3.8.1
  • factory_bot_rails:4.11.1
答案

问题是样本数据。它是10MB左右,但我正在使用resize_to_fit:[300,300],所以它被压缩了。我已经通过'binding.pry'检查了它,它不到5MB。

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

以上是关于如何在Rspec中测试文件大小的主要内容,如果未能解决你的问题,请参考以下文章

如何在 RSpec 中运行单个测试/规范文件?

使用Rspec测试图像

如何在 Capybara 和 RSpec 中测试 CSV 文件下载?

如何从 Rspec 输出禁用 http 日志?

如何在 Rails/RSpec 中测试异常引发?

RSpec:如何测试文件解析器