1

我有一个带有时间属性的模型。我想检查时间不能为空(更好的选择可能是检查输入是否为时间,但我不知道如何处理)。我试过这个验证:

#  id              :integer         not null, primary key
#  school_class_id :integer
#  meeting_time    :time
class Meeting < ActiveRecord::Base                                                    
  validates :meeting_time,
              :presence => { :message => "can't be empty!" }                                                            
end

然后我尝试在规范中检查这一点,但失败了(空闲时间可以,但不应该)。我做错了什么?

规格:

#  id              :integer         not null, primary key
#  school_class_id :integer
#  meeting_time    :time

require 'spec_helper'

describe Meeting do
  before(:each) do
    @class = FactoryGirl.create( :school_class )
    @attr_meeting = {
      :meeting_theme => 'Text is here',
      :meeting_date => "#{Date.today}",
      :meeting_time => "#{Time.now}",
      :meeting_room => '1234'
    }
  end

  describe "Validations" do
    describe "Rejection" do
      it "should reject blank time" do
        wrong_attr = @attr_meeting.merge( :meeting_time => "  " )
        @class.meetings.build( wrong_attr ).should_not be_valid
      end
    end
  end
end

错误:

 Meeting Validations Rejection should reject blank time
     Failure/Error: @class.meetings.build( wrong_attr ).should_not be_valid
       expected valid? to return false, got true
4

1 回答 1

1

在您的示例中,您分配" "meeting_time, notnil""。但是Time对象可以以某种方式从非空,甚至是空白字符串中成功生成。设置meeting_time""nil应该可以解决您的问题。

也许我不完全理解某些东西,但我认为这不是非常合乎逻辑和可预测的行为。需要查看来源。

于 2012-04-29T11:08:18.067 回答