gpt4 book ai didi

ruby-on-rails - 使用 RSpec 测试 Rails 模型验证日期

转载 作者:行者123 更新时间:2023-12-04 07:38:50 26 4
gpt4 key购买 nike

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

为了确保这些验证,我使用了 ValidatesTimeliness https://github.com/adzap/validates_timeliness

我的模型如下:

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

在我的 RSpec 测试中,我有:
describe Event do
let(:event) { FactoryGirl.build :event }
subject { event }

context "when start_date is before the current time" do
it {should_not allow_value(1.day.ago).
for(:start_date)}
end

context "when end_date is before or on start date" do
it {should_not allow_value(event.start_date - 1.day).
for(:end_date)}

it {should_not allow_value(event.start_date).
for(:end_date)}
end

context "when the end_date is after the start_date" do
it {should allow_value(event.start_date + 1.day).
for(:end_date)}
end
end

然而,这并没有真正测试我的开始日期必须在确切的日期时间之前。
例如,如果我不小心使用了 :today而不是 :now在我的模型中,这些测试也会通过。

我在网上读到,曾经有一个名为 validate_date 的 RSpec 匹配器。 ( http://www.railslodge.com/plugins/1160-validates-timeliness ) 这正是我正在寻找的,但据我所知它已被删除。

我的问题是如何改进我的测试,我是否需要添加尝试最少时间(即 ms)的测试以确保相应地通过/失败,还是有更好的方法来做到这一点?

提前致谢!

最佳答案

您可以与 valid? 合作和 errors.messages :

  • 建一个 Event除了您的 start_date 通过验证和 end_date
  • 设置 start_dateend_date命令,并断言 event.valid?true
  • 设置 start_dateend_date命令,并断言它不是 valid?还有那个event.errors.messages包括正确的验证错误。 (注意,在检查 event.valid? 之前必须先调用 event.errors.messages ,否则它们将为空)

  • valid? 的示例和 errors.messages :
     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 #=> {}

    关于ruby-on-rails - 使用 RSpec 测试 Rails 模型验证日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13138208/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com