我有一个测试:
describe MyService::Thing do
let(:foo) { FactoryGirl.create(:foo) }
it 'tests something' do
foo.update_attributes(...)
p foo.created_at, foo.updated_at #these are the same
end
end
为什么created_at
和updated_at
时间戳相同,除了手动设置时间外,我还能做些什么来确保它们不同?
答案 0 :(得分:0)
您正在运行的代码实际上是
FactoryGirl.create(:foo).update_attributes(...)
由于let
的工作原理。现在我可以提供一些可能性,为什么时间戳可以是相同的,但你必须调试到FactoryGirl代码(以及更多)以确认。
FG.create做了一些聪明的东西,它的创建延迟了保存,直到真正必要
同上,但适用于ActiveRecord
同上,但适用于数据库,也许它会优化为单个交易事件。
操作发生得太快,以至于记录时间戳的分辨率没有差异。
确保它们不同
Fg.create(:foo)
sleep(1)
update_attributes
睡眠的替代方法可以是重载,使用时间转换器(timecop)......