2012-03-26 7 views
0

Unit-Test:Unit-Tests und Erklärung Datetime-Verhalten erforderlich

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

ich am Ende mit:

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>. 

Speichermethode von Modell:

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 

Könnte mir jemand exaplain warum diese geschehen?

Antwort

1

Alle DateTimes werden in der Datenbank im UTC-Format gespeichert, im Gegensatz zu Ihrer lokalen Zeit.

Rails bietet viele Methoden zur Konvertierung von und nach UTC. In Ihrem Fall könnten Sie Ihren Testdurchlauf unter Verwendung des utc Verfahren machen (obwohl ich gegen das Schreiben von Tests warnen würde, die zu bestimmten Zeiten abhängen, wie Sie sicher in Inkonsistenzen führen werden):

assert_equal @job.updated_now, now.utc 

Ressourcen:

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

Verwandte Themen