FactoryGirl为Rails模型时间属性设置错误的时间

时间:2017-06-20 22:18:11

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

给定具有模式的ActiveRecord模型,

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-matcher的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)

1 个答案:

答案 0 :(得分:1)

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