factory_girl:工厂在创建时验证失败(时间),但在我的应用程序中,验证通过



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

这工作得很好,但是当我用factory-girl创建工厂时,对于我的测试,验证失败,我可以看到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,我的验证失败。

这是我的验证方法:
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创建模型而不篡改时间数据和验证失败?

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

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

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

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

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

相关内容

最新更新