Rspec / FactoryGirl:为什么created_at和updated_at具有相同的值?

时间:2015-08-03 19:45:16

标签: ruby-on-rails rspec factory-bot

我有一个测试:

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_atupdated_at时间戳相同,除了手动设置时间外,我还能做些什么来确保它们不同?

1 个答案:

答案 0 :(得分:0)

您正在运行的代码实际上是

FactoryGirl.create(:foo).update_attributes(...)

由于let的工作原理。现在我可以提供一些可能性,为什么时间戳可以是相同的,但你必须调试到FactoryGirl代码(以及更多)以确认。

  1. FG.create做了一些聪明的东西,它的创建延迟了保存,直到真正必要

  2. 同上,但适用于ActiveRecord

  3. 同上,但适用于数据库,也许它会优化为单个交易事件。

  4. 操作发生得太快,以至于记录时间戳的分辨率没有差异。

  5. 确保它们不同

    Fg.create(:foo)
    sleep(1)
    update_attributes
    

    睡眠的替代方法可以是重载,使用时间转换器(timecop)......