我注意到的一件事是,在我所做的大多数项目中,总是需要很长时间(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,但尽管如此,我还是希望有人有一种更快的方法来测试图像内容类型。
看起来您正在针对回形针运行自己的测试。
通常,我会让 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
为了加快回形针验证测试速度,您可以模拟或存根内容类型检查,而不是使用实际的文件附件:
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) }
这两种方法都应该有助于减少测试时间。如果您需要更多详细信息,请告诉我!