2016-07-14 15 views
0

Ich habe einige ähnliche Fragen bezüglich der Zeiträume hier gesehen, aber keine der Lösungen scheint für mich zu funktionieren. Was ich versuche, ist ein Datumsbereich von einem Monat und bestätigen, ob das heutige Datum in diesem Bereich liegt. Letztendlich wird dies für jeden Monat des Jahres in eine Case-Methode eingefügt, da die Funktionalität, die ich teste, datumsspezifisch ist.Gurken-Datumsbereiche Ruby

Ich habe versucht, die Daten in Ganzzahl zu konvertieren, um die Berechnung zu erleichtern (oder so dachte ich), dann between? verwenden, um den Datumsbereich zu überprüfen.

Dies ist mein Code:

today = Time.now.to_i 

    month_start = Time.parse('1 Jan 2016').to_i 

    month_end = Time.parse('31 Jan 2016').to_i 

if today.between?(month_start,month_end) 
    #do something 
end 

Wenn auf jede Variable ein Puts mit, dies ist der Ausgang:

Today = 1468479863 

month_start = 1451606400 

month_end = 1454198400 

Wie Sie sehen können, sollte dies nicht als heute nicht zwischen den ist Datumsbereich, es ist weit außerhalb. Dennoch werden die Tests grün, was darauf hindeutet, dass meine if-Anweisung, die die between?-Methode enthält, nicht funktioniert.

Gibt es etwas blendend offensichtlich, dass ich hier vermisse, wie ich es nicht sehen kann.

Der Schritt im Feature ist hier:

Then(/^I can see that all results have a statement due this month$/) do 
    today = Time.now.to_i 

    month_start = Time.parse('1 Jan 2016').to_i 

    month_end = Time.parse('31 Jan 2016').to_i 

    results_table = all('table#clickable-rows tbody tr') 

    if today.between?(month_start,month_end) 
     results_table.each do |row| 
     within(row.all('td')[3]) do 
      statement_date = find('table#clickable-rows tbody tr td:nth-child(4) > span') 
      expect(statement_date).to have_text '1 Aug 2016' 
     end 
     end 
    end 
    end 
+0

es wäre hilfreich, wenn Sie enthalten die tatsächlichen Tests, die übergeben ... Ausführen des obigen Codes, 'zwischen?' funktioniert wie erwartet, da der Code in der 'if' Anweisung nicht ausgeführt wird ... –

+0

Ich habe die Daten dieses Monats und den Test bestanden, so zu Bestätigung des Tests Ich habe dann das Monatsdatum auf Jan umgestellt, um sicherzustellen, dass der Test bei der if-Anweisung fehlgeschlagen ist (da das Datum im Januar nicht gefunden werden sollte) und der Test in den Ergebnissen weiterhin bestanden zu haben scheint. Ich habe den Test in die Frage aufgenommen. – Tom

Antwort

1

Ihre Tests bestehen, denn wenn today.between?(month_start,month_end) false zurückgibt, werden keine Erwartungen erfüllt!

Sie möchten vielleicht die, wenn sie in der Erwartung betrachten, in sich verändernden:

Then(/^I can see that all results have a statement due this month$/) do 
    today = Time.now.to_i 

    month_start = Time.parse('1 Jan 2016').to_i 

    month_end = Time.parse('31 Jan 2016').to_i 

    results_table = all('table#clickable-rows tbody tr') 

    expect(today).to be_between(month_start,month_end) 
    results_table.each do |row| 
     within(row.all('td')[3]) do 
     statement_date = find('table#clickable-rows tbody tr td:nth-child(4) > span') 
     expect(statement_date).to have_text '1 Aug 2016' 
     end 
    end 
    end 
+0

Ich verstehe. Ich werde das weiter verwenden. Vielen Dank. – Tom

0

Ich glaube, Sie falsch eingegeben dies:

month_end = Time.parse('1 Jan 2016').to_i 

Sollte es nicht sein '31 Jan 2016' statt?

+0

Das war ein Tippfehler, es ist der 31. Januar im Code. Aktualisierte Frage – Tom

0

Ihre ganze Test etwas wirre scheint - ich glaube, aus der Beschreibung des Schrittes, was Sie wirklich wollen, ist

Then(/^I can see that all results have a statement due this month$/) do 
    expected_date = /\A#{Date.today.strftime('1 %b %Y')}\Z/ # rexex needed so it doesn't match 11 Jul 2016 or 21 Jul 2016 

    results_table = all('table#clickable-rows tbody tr') 

    results_table.each do |row| 
    expect(row.find('td:nth-child(4)')).to have_text(expected_date) 
    end 
end 

Der results_table.each Block auch als

expect(results_table).to RSpec.all(have_selector('td:nth-child(4)', text: expected_date)) 
geschrieben worden sein könnte
+0

Es stellte sich heraus, dass ich die Dinge, die ich nicht brauchte, einfach verkomplizierte. Ich habe die Kriterien für meinen Test neu geschrieben. – Tom