RSpec在创建对象时跳过许多验证之一

时间:2015-10-21 09:01:12

标签: ruby-on-rails validation rspec rspec-rails

我正在尝试为我的一个模型编写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空间。

1 个答案:

答案 0 :(得分:2)

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

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

如果要保存运行验证的对象,但避免使用S3,如评论中的@apneadiving所示,您可以更改测试环境的存储设置。您可以通过修改

之类的carrierwave初始化程序来实现
CarrierWave.configure do |config|
  if Rails.env.test?
    config.storage = :file
  end
end