回形针/Rspec 测试:是否有更快的方法来测试回形针 validates_attachment_content_type?

问题描述 投票:0回答:2

我注意到的一件事是,在我所做的大多数项目中,总是需要很长时间(30 秒以上)的一个规范是这个 shoulda/paperclip 助手:

it { should validate_attachment_content_type(:bannerimage)
  .allowing('image/png', 'image/jpeg', 'image/gif', 'image/jpg')
  .rejecting('text/plain')
}

我很想保留内容类型验证,但我想知道是否有更快的方法来做到这一点。我已经用 :slow 标记这些测试并在没有 :slow 规范的情况下运行 rspec,但尽管如此,我还是希望有人有一种更快的方法来测试图像内容类型。

ruby-on-rails rspec paperclip shoulda paperclip-validation
2个回答
0
投票

看起来您正在针对回形针运行自己的测试。

通常,我会让 gem 提供商(尤其是像这样的大型产品)在推送版本之前证明他们的规范将成功运行。

我从测试中删除了实际的回形针内容,以使它们像这样更快,放在spec_helper.rb中

# stub out paperclip? http://pivotallabs.com/stubbing-out-paperclip-imagemagick-in-tests/
# only like .1 seconds faster anyways though...
module Paperclip
  def self.run cmd, params = "", expected_outcodes = 0
    case cmd
    when "identify"
      return "100x100"
    when "convert"
      return
    else
      super
    end
  end
end

class Paperclip::Attachment
  def post_process
  end
end

0
投票

为了加快回形针验证测试速度,您可以模拟或存根内容类型检查,而不是使用实际的文件附件:

it "validates content type" do
  bannerimage = instance_double("Bannerimage")
  allow(bannerimage).to receive(:content_type).and_return('image/png')
  expect(bannerimage.content_type).to eq('image/png')
end

这会跳过文件上传,使测试速度更快。或者,您可以通过仅检查内容类型验证而不附加文件来简化它:

it { should allow_value('image/png').for(:bannerimage_content_type) }

这两种方法都应该有助于减少测试时间。如果您需要更多详细信息,请告诉我!

© www.soinside.com 2019 - 2024. All rights reserved.