如何使用Rspec测试使用Paperclip的模型是否验证了上传文件的大小?

3

模型:

class Attachment < ActiveRecord::Base

  belongs_to :narrative

  attr_accessible :description, :user_id, :narrative_id

  has_attached_file :file

  validates_presence_of :user_id
  validates_presence_of :narrative_id
  validates_attachment :file, :presence => true,
                       :size => {:less_than => 20.megabytes}
end

不起作用的测试:

describe Attachment do
  it { should validate_presence_of :file }
  it { should validate_size_of :file } # validate_size_of does not exist
end

我希望避免将一个20MB的文件放入仓库中进行测试。是否有类似于我上面尝试的方法,可以真正起作用呢?


添加一个文件的模拟器,它的函数大小应该解决问题。 - scones
我猜你正在使用shoulda-matchers,由于显而易见的原因,它们还没有内置validate_size_of匹配器。另一件事是,恐怕你需要像你提到的那样粗略地编写测试。 - Gaurav Agarwal
1个回答

8
我最好的做法是使用内置的Paperclip shoulda matchers。那个链接的文档非常好,但这里是一个概览,告诉你它可以做什么:
在spec_helper.rb中,您需要引用matchers:
require "paperclip/matchers"

并且包含该模块:

Spec::Runner.configure do |config|
  config.include Paperclip::Shoulda::Matchers
end

验证附件大小的示例:

describe User do
  it { should validate_attachment_size(:avatar).
                less_than(2.megabytes) }
end

如果您有兴趣,匹配器的源代码可以在GitHub上找到

谢谢。我在spec_helper中没有包含这一部分。 - Matt Gibson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接