Модульное тестирование и объяснение поведения DateTime необходимо - PullRequest
0 голосов
/ 26 марта 2012

модульный тест:

  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 Ответ

1 голос
/ 26 марта 2012

Все даты и времени хранятся в базе данных в формате UTC, в отличие от вашего местного времени.

Rails предоставляет множество методов для конвертации в и из UTC. В вашем случае вы могли бы пройти тест, используя метод utc (хотя я бы предостерег от написания тестов, которые зависят от определенного времени, поскольку вы наверняка столкнетесь с несоответствиями):

assert_equal @job.updated_now, now.utc

Ресурсы:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...