RSpec 跳过创建对象时的众多验证之一
RSpec skip one of many validations in creating an object
我正在尝试为我的一个模型编写 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
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
我正在尝试为我的一个模型编写 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
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