Ruby on rails 测试rails模型是否使用RSpec验证日期

Ruby on rails 测试rails模型是否使用RSpec验证日期,ruby-on-rails,validation,datetime,rspec,rspec-rails,Ruby On Rails,Validation,Datetime,Rspec,Rspec Rails,我对Rails和Rspec有点陌生,因此我不确定如何在我的模型中测试日期时间验证是否正确。 我制作了一个有开始时间和结束时间的模型事件,其中有一些重要的条件,比如开始时间不能在过去,结束时间必须在开始时间之后 为了确保这些验证,我使用ValidateSimelity 我的模型如下: class Event < ActiveRecord::Base ... validates_datetime :start_date, :after => :now, :aft

我对Rails和Rspec有点陌生,因此我不确定如何在我的模型中测试日期时间验证是否正确。 我制作了一个有开始时间和结束时间的模型事件,其中有一些重要的条件,比如开始时间不能在过去,结束时间必须在开始时间之后

为了确保这些验证,我使用ValidateSimelity

我的模型如下:

class Event < ActiveRecord::Base
  ...

  validates_datetime :start_date,
    :after => :now,
    :after_message => "Event cannot start in the past"

  validates_datetime :end_date,
    :after => :start_date,
    :after_message => "End time cannot be before start time"
end
然而,这并不能真正测试我的开始日期是否必须早于确切的日期时间。 例如,如果我在模型中意外地使用了
:today
而不是
:now
,那么这些测试也会通过

我在网上读到,以前有一个名为
validate_date
()的RSpec匹配器,这正是我想要的,但据我所知,它已经被删除了

我的问题是如何改进我的测试,我是否需要添加尝试最少时间(即毫秒)的测试以确保通过/失败,还是有更好的方法


提前谢谢

您可以处理
有效?
错误。消息

 user = User.new
 user.errors.messages #=> {} # no messages, since validations never ran
 user.valid? # => false
 user.errors.messages #=> {:email=>["can't be blank"]}

 user.email = "foo@bar.com"
 user.valid? #=> true
 user.errors.messages #=> {}
  • 构建通过验证的
    事件
    ,除了
    开始日期
    结束日期
  • 设置
    开始日期
    结束日期
    右侧顺序,并断言
    事件有效?
  • 错误的顺序设置
    开始日期
    结束日期
    ,并断言它无效?和
    事件.错误。消息
    包括正确的验证错误。(注意,在检查
    event.errors.messages
    之前,必须调用
    event.valid?
    ,否则它们将为空)

有效?
错误的示例。消息

 user = User.new
 user.errors.messages #=> {} # no messages, since validations never ran
 user.valid? # => false
 user.errors.messages #=> {:email=>["can't be blank"]}

 user.email = "foo@bar.com"
 user.valid? #=> true
 user.errors.messages #=> {}
试试这个

validates_date :end_time, :after => [:start_time, Proc.new {1.day.from_now_to_date}]
validates_date :start_time, :after => Time.now