Bazı DB varsayılanlarını Time (Zaman) ile ayarlamaya çalışan Rails 4 eski uygulama & ile çalışma. MySQL kullanarak.Raylar - Geçişte varsayılan süreyi ayarlama ve RSpec ile sınama
class AddDefaultsToCheckInAndCheckOut < ActiveRecord::Migration
def change
change_column_default :rooms, :check_in_time, "12:00"
change_column_default :rooms, :check_out_time, "09:00"
end
end
şema şimdi gösterir:
t.time "check_in_time", default: "2000-01-01 12:00:00"
t.time "check_out_time", default: "2000-01-01 09:00:00"
tarih bölümü emin oldum rağmen sütun type
ayarlandığında gereklidir neden bana hiçbir önemi olan bir göç eklendi
Bu, Room
modelinde tanımlanan bazı belirleyicilerden kaynaklanıyor olabilir:
def check_in_hours=(hours)
begin
self.check_in_time = hours.present? ? Time.utc(2001,1,1, hours, self.check_in_time.try(:min)) : nil
rescue ArgumentError
end
end
def check_in_mins=(minutes)
begin
if self.check_in_time.try(:hour)
self.check_in_time = Time.utc(2001, 1, 1, self.check_in_time.try(:hour), (minutes.present? ? minutes : 0))
else
self.check_in_time = nil
end
rescue ArgumentError
end
end
İşimi kontrol etmek için bazı özelliklerini ekledi (room_spec.rb)
it "defaults to 12:00 check in time if not specified" do
expect(room.check_in_time).to eq "2000-01-01 12:00:00"
end
Sonra da fabrikaya ilave (fabrikalar/rooms.rb)
check_in_time "2000-01-01 12:00:00"
check_out_time "2000-01-01 09:00:00"
Buradaki amaç, yazdığım taşıma tarafından oluşturulan şema varsayılanının aynasıydı.
Ancak bu teknik özellik başarısız:
1) Room defaults to 12:00 check in time if not specified
Failure/Error: expect(room.check_in_time).to eq "2000-01-01 12:00:00"
expected: "2000-01-01 12:00:00"
got: 2000-01-01 12:00:00.000000000 +0800
Sorum en ilgili bu şunlardır:
- Bu nasıl varsayılan uygulamak isteyen olmalıdır?
- Ve nasıl test edilir?
- Veritabanı varsayılanlarını bile test etmeli miyim?
- Fabrikaya eklemek, testi sadece 'yüklemeye' benziyor.
Her zaman UTC'yi veya saat dilimine özgü saat dilimini kullanarak kontrol edin ... emin değilseniz, beklentinin her iki tarafını da dönüştürün. –