2017-06-20 69 views
0

鉴于ActiveRecord模型与架构,FactoryGirl设置错误的时间为Rails模型时间属性

create_table "foos", id: :serial, force: :cascade do |t| 
    t.date "date" 
    t.time "time" 
# ... 

和FactoryGirl一个Foo工厂,

FactoryGirl.define do 
    factory :foo do 
    date Date.today 
    time Time.new(2001, 9, 11) 
# ... 

,并使用shoulda-一个RSpec模型规范匹配器,

it { is_expected.to have_attributes(
     date: Date.today, 
     time: Time.new(2001, 9, 11), 
# ... 

测试失败,

-:time => 2001-09-11 00:00:00.000000000 -0700, 
+:time => 2000-01-01 08:00:00.000000000 +0000, 

因为被测试者具有time属性,其值为2000-01-01 08:00:00.000000000 +0000

FactoryGirl为什么不使用工厂指定的时间值Time.new(2001, 9, 11)

+0

'日期'和'时间'是可怕的域名 - 容易与保留字发生冲突 – Pavling

+0

我知道。如果你明白我的意思,那么“foos”也是。 – ybakos

+0

不,'foos'很好,它不会混淆任何保留字,并且让你的例子变得清晰。您的字段名称选择(如果它们不是真实名称)会混淆您的示例: - / – Pavling

回答

1

可能是因为time字段忽略了存储在数据库中的数据的日期部分。因此,您的测试需要测试该字段的hhmmss与您的预期相符 - 但您也正在检查yymmdd,并且看起来像区域也参与了该行为。