2016-04-22 11 views
0

Methode zu testen versucht:Test-Abfragen in Rails mit Minitest

def self.by_date(date) 
    where("DATE(created_at) = ?", date) 
end 

Comments.yml (Halterung):

one: 
    user_id: 1 
    job_id: 24 
    content: "This is a test" 

Aktuelle Test:

require 'test_helper' 
require 'date' 

class CommentTest < ActiveSupport::TestCase 

setup do 
    @comment = comments(:one) 
end 

test 'organizes by date' do 
    @comment.created_at = Date.today 
    assert_equal @comment.created_at, Comment.by_date(Date.today).first.created_at 
end 

end 

ich am Ende mit:

2) Failure: 
    CommentTest#test_organizes_by_date 
    --- expected 
    +++ actual 
    @@ -1 +1 @@ 
-Fri, 22 Apr 2016 00:00:00 UTC +00:00 
+Fri, 22 Apr 2016 20:48:42 UTC +00:00 

Ich gehe davon aus, dass es einen Weg gibt, effizienter zu testen, aber kein Glück gefunden haben. Irgendwelche Ideen?

Antwort

1

@comment.created_at ist ein Date, aber Comment.by_date(Date.today).first.created_at ist ein DateTime Objekt.

Versuchen Sie DateTime Objekt Date zu konvertieren:

assert_equal @comment.created_at, Comment.by_date(Date.today).first.created_at.to_date 
+0

Ahhh perfekt! Es funktioniert jetzt. Danke IIya! – user3007294

1

Ich glaube, Sie testen wollen, dass die richtigen Bemerkungen des self.by_date Methode zurückgegeben werden. Ist die genaue Zeit wichtig oder kann sie nur am selben Tag oder in derselben Stunde sein?

Erstellen Sie einen weiteren Kommentar und legen Sie das Erstellungsdatum auf gestern fest. Testen Sie dann, dass das Ergebnis den heute erstellten Kommentar und nicht den gestern erstellten Kommentar enthält.

class CommentTest < ActiveSupport::TestCase 

    setup do 
    @comment1 = comments(:one) 
    @comment2 = comments(:one) 
    end 

    test 'organizes by date' do 
    @comment1.created_at = Time.now 
    @comment2.created_at = Time.now - 1.day 
    assert_equal [@comment1], Comment.by_date(Time.now) 
    assert_equal [@comment2], Comment.by_date(Time.now - 1.day) 
    end 

end 

Sie benötigen einige zusätzliche Datum Manipulation in dem Verfahren zu tun Kommentare für den Tag zu kommen über die genaue Zeit gegenüber.

def self.by_date 
    where(created_at: Time.now.day) 
end 

Wenn Sie die genaue Zeit der Schöpfung wollen, suchen Sie vielleicht bei TimeCop verwendet, die für die Prüfung auf präzisen Timings hilfreich.

Entschuldigung im Vorraus für Minitest Syntaxfehler, verwende ich normalerweise rspec.

Verwandte Themen