我正在尝试为我的一个模型编写RSpec测试。我希望我的测试也能测试验证,但我想跳过特定的验证,只在测试中。
我理解为了跳过验证,我可以通过(:validate => false)
选项传递给create
或save
操作,但我的理解是,这将跳过所有验证模型。
我想要的是仅跳过特定的验证。
我的模型中的验证如下:
validates :user_id, :name, :description, :address, :image, :spot_type, :internet_options, presence: true
validate :image_size_validation
我希望所有验证生效,但只跳过presence of image
的验证。原因是,每次运行测试时,我都不想填充我托管图像的s3
空间。
答案 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