2017-06-20 15 views
0

、shoulda-を使用してFactoryGirlはRailsのモデルの時刻属性のスキーマと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) 
# ... 

と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, 

被検者が値2000-01-01 08:00:00.000000000 +0000あるtime属性を有しているからです。

FactoryGirlは工場で指定された時間値Time.new(2001, 9, 11)を使用していないのはなぜですか?

+0

'date'と' time'はフィールドの恐ろしい名前です - 場所全体の予約語と衝突する可能性があります – Pavling

+0

私は知っています。あなたが私の意味を持っているならば、それは "foos"です。 – ybakos

+0

いいえ、 'foos'は問題ありません。予約語を混乱させず、例を明確にします。あなたのフィールド名の選択肢(実際の名前でない場合)はあなたの例を難読化しています: - / – Pavling

答えて

1

timeフィールドは、DBに格納されているデータの日付部分を無視するために可能です。だから、フィールドのhhmmssがあなたの期待に合っているかどうかテストする必要がありますが、yymmddもチェックしていて、ゾーンがゾーンに入っているように見えます。

関連する問題