Ruby on rails 测试rails模型是否使用RSpec验证日期
我对Rails和Rspec有点陌生,因此我不确定如何在我的模型中测试日期时间验证是否正确。 我制作了一个有开始时间和结束时间的模型事件,其中有一些重要的条件,比如开始时间不能在过去,结束时间必须在开始时间之后 为了确保这些验证,我使用ValidateSimelity 我的模型如下: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
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