factory_girl:Factories在创建时未通过验证(但是在我的应用程序中,验证通过)

时间:2013-05-09 15:50:26

标签: ruby-on-rails rspec factory-bot

我创建了一个具有严格输入验证时间的应用程序。您必须使用以下格式输入时间: 14:00

这很好用,但是当我用factory-girl创建工厂时,对于我的测试,验证失败了,我可以看到工厂女孩试图用这些数据创建它们: 2000-01-01 14: 00:00 UTC

这是我的工厂:

factory :stamp do
  end_time "14:00"
end

所以当我运行 FactoryGirl.create(:stamp)时,FG会尝试将 end_time 设置为: 2000-01-01 14:00:00 UTC < / strong>,我的验证失败了。

这是我的验证方法:

validates :start_time, :end_time, :format => { :with => /[0-2][0-3]:[0-5][0-9]/,
                                   :message => "You have to enter a time in this format 14:00"

如何让FactoryGirl在不篡改时间数据和验证失败的情况下创建模型?

2 个答案:

答案 0 :(得分:2)

根据您的输出,end_time是Time类型,因此它将自动从String转换为Time。您不应该对非String数据类型进行字符串格式验证(它总是在内部存储为2000-01-01 14:00:00 UTC)。

如果您想验证输入格式,我建议您在视图/控制器级别执行此操作,并验证模型上是否存在start_timeend_time。如果格式无法正确地转换为时间,ActiveRecord将在创建或保存时抛出错误。

答案 1 :(得分:1)

您可以尝试强制使用FactoryGirl格式为end_time:

factory :stamp do
  end_time Time.new(2013,1,1,14,0,0).strftime("%H:%M")
end

strftime("%H:%M")将时间转换为您要查找的格式