我创建了一个具有严格输入验证时间的应用程序。您必须使用以下格式输入时间: 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在不篡改时间数据和验证失败的情况下创建模型?
答案 0 :(得分:2)
根据您的输出,end_time是Time类型,因此它将自动从String转换为Time。您不应该对非String数据类型进行字符串格式验证(它总是在内部存储为2000-01-01 14:00:00 UTC
)。
如果您想验证输入格式,我建议您在视图/控制器级别执行此操作,并验证模型上是否存在start_time
和end_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")
将时间转换为您要查找的格式