RSpec 跳过创建对象时的众多验证之一

RSpec skip one of many validations in creating an object

我正在尝试为我的一个模型编写 RSpec 测试。我希望我的测试也能测试验证,但我想跳过特定的验证,只在测试中。

我知道要跳过验证,我可以将 (:validate => false) 选项传递给我的 createsave 操作,但我的理解是这将跳过所有验证对于模型。

我想要的是只跳过特定的验证。

我模型中的验证如下:

  validates :user_id, :name, :description, :address, :image, :spot_type, :internet_options, presence: true
  validate :image_size_validation

我希望所有验证都生效,但只跳过 presence of image 的验证。原因是我不想在每次 运行 测试时填充我托管图像的 s3 space。

如果您想专门测试 验证 ,您可以只构建对象而不保存它们,然后测试调用 #valid? 方法。 类似的东西(假设 FactoryGirl 用于创建)

expect(build(:something, { field: value })).to be_valid

如果您想保存带有验证的对象 运行,但避免使用 S3,正如@apneadiving 在评论中所建议的,您可以更改测试环境的存储设置。您可以通过像

这样修改载波初始化器来做到这一点
CarrierWave.configure do |config|
  if Rails.env.test?
    config.storage = :file
  end
end