给定具有模式的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)
?
答案 0 :(得分:1)
可能是因为time
字段忽略了DB中存储的数据的日期部分。因此,您的测试需要测试该字段的hhmmss
是否与您的预期相符 - 但您还要检查yymmdd
,看起来区域也会参与该行为