2017-06-20 70 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,並且看起來像區域也參與了該行爲。