需要单元测试和DateTime行为解释

时间:2012-03-26 10:37:42

标签: ruby-on-rails-3 unit-testing date

单元测试:

  test "job update date" do
    @job.save
    @job.company = 'New Company'
    now = DateTime.now
    @job.save
    assert_equal @job.updated_at, now
  end

我最终得到了:

  1) Failure: test_job_update_date(JobTest) [test/unit/job_test.rb:32]: 
  <Mon, 26 Mar 2012 10:36:11 UTC +00:00> expected but was <Mon, 26 Mar 2012 12:36:11   +0200>.

从模型中保存方法:

  def save
    if self.created_at.nil?
      self.created_at = DateTime.now
      self.expires_at = self.created_at + Jobeet::Application::ACTIVE_DAYS
    else
      self.updated_at = DateTime.now
    end
    super
  end

有人可能会为我发生这种情况吗?

1 个答案:

答案 0 :(得分:1)

所有DateTimes都以UTC格式存储在数据库中,而不是您当地的时间。

Rails提供了许多转换为UTC的方法。在您的情况下,您可以使用utc方法进行测试通过(尽管我会提醒您不要编写依赖于特定时间的测试,因为您肯定会遇到不一致):

assert_equal @job.updated_now, now.utc

资源:

http://api.rubyonrails.org/classes/DateTime.html