【问题标题】:How can I use Rspec to test that a model using Paperclip is validating the size of an uploaded file?如何使用 Rspec 测试使用 Paperclip 的模型是否正在验证上传文件的大小?
【发布时间】:2013-02-09 14:20:35
【问题描述】:

型号:

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

我想避免将 20 MB 的文件转储到 repo 中只是为了测试这一点。有没有一种类似于我上面尝试过的方法可以真正起作用?

【问题讨论】:

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

标签: ruby-on-rails ruby rspec paperclip


【解决方案1】:

我做到这一点的最好方法是使用内置的shoulda matchers for Paperclip。该链接上的文档非常好,但以下是文档中您可以使用它做什么的概述:

在 spec_helper.rb 中,您需要要求匹配器:

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

如果您有兴趣,匹配器的来源可以是found on GitHub

【讨论】:

  • 谢谢。我没有在 spec_helper 中得到包含位。
猜你喜欢
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 2017-05-28
  • 1970-01-01
  • 2016-10-07
  • 2019-10-02
  • 1970-01-01
相关资源
最近更新 更多