在日期字段上跳过验证但仍然运行before_validate回调

时间:2015-08-20 15:19:58

标签: ruby-on-rails validation

我最终陷入了一个小困境,我很想知道你对此的一般看法是什么以及我需要思考的不同。

我有一个名为发布的模型,其中包含 published_date 。在某些测试中,我使用FactoryGirl创建将此日期推回以进行统计计算等。现在我想要一个约束,以便不能将此日期推回去。我添加了验证,显而易见的问题是我在上面提到的测试中得到了验证错误。

你可以说我可以通过执行保存(验证:false)来跳过测试中的验证,但这会导致before_validation回调未运行,在我的情况下,正确设置数据并确保填写字段很重要数据等。

你对此有何看法?

2 个答案:

答案 0 :(得分:1)

检查timecop gem它是否允许您操作时间,因此如果您的验证不允许过去的日期,您可以回到过去,然后Time.now将返回旧时间,验证工作正常

这是你可以做什么的愚蠢样本

Timecop.freeze(30.days.ago) do
  object = FactoryGirl.create(:some_object)
end

expect(object.created_at).to be <= 30.days.ago

答案 1 :(得分:0)

您可以在规范文件或规范帮助程序之前打开该类,并覆盖before_validation env中的test方法。喜欢 -

class Post < ActiveRecord::Base
    def method_before_Validation
      true
    end
end