2016-07-14 2 views
0

날짜 범위와 관련하여 여기에 비슷한 질문이 몇 가지 있지만 어느 솔루션도 저에게 효과가없는 것으로 보입니다. 내가하는 일은 한달의 날짜 범위를 가지고 오늘 날짜가 그 범위 내에 있는지 확인하는 것입니다. 결국, 테스트하는 기능이 날짜 관련 기능이므로 올해의 매월 사례 메서드에 넣을 것입니다.오이 날짜 범위 루비

계산을 쉽게하기 위해 날짜를 정수로 변환하려고 했으므로 (또는 내가 생각한대로) between?을 사용하여 날짜 범위를 확인하십시오. 당신이 볼 수 있듯이 오늘 사이 아니므로

Today = 1468479863 

month_start = 1451606400 

month_end = 1454198400 

이 실패한다 :

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 

각 변수에 박았을 가지고, 이것은 출력 :

내 코드입니다 날짜 범위가 멀어졌습니다. 그러나 테스트가 녹색으로 바뀌어 between? 메서드가 포함 된 내 if 문이 작동하지 않습니다.

나는 그것을 볼 수 없기 때문에 나는 여기에 실종되었다는 명백한 무언가가 있나.

기능의 단계는 여기에 있습니다 :

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

과 같이 쓸 수 있었다 위의 코드를 실행하는 실제 테스트가 포함되어 있습니다.'between? '은'if' 문 안의 코드가 실행되지 않기 때문에 예상대로 작동합니다 ... –

+0

이 달의 날짜를 사용하고 테스트를 통과했습니다. 테스트를 확인한 다음 월로 날짜를 Jan으로 전환하여 if 문에서 테스트가 실패했는지 확인합니다 (1 월의 오늘 날짜를 찾지 않아야 함). 테스트 결과가 여전히 전달 된 것처럼 보입니다. 질문에 시험을 포함 시켰습니다. – Tom

답변

1

today.between?(month_start,month_end)이 false를 반환하면 예상치 못한 결과가 나옵니다.

당신은 그 자체로 기대에 경우 변경을 고려하는 것이 좋습니다 : 귀하의 전체 테스트가 조금 뒤죽박죽 보인다

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

나는 알고있다. 나는 이것을 앞으로 사용할 것이다. 고맙습니다. – Tom

0

내가 생각하는 당신이 잘못 입력 :

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

그것이 있어야하지 '31 Jan 2016'을 대신?

+0

그것은 오타였습니다. 코드에서 1 월 31 일이었습니다. 업데이트 된 질문 – Tom

0

- 나는 당신이 실제로 원하는 단계의 설명에서 생각은

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 
입니다

results_table.each 블록은 또한 당신이 경우에 도움이 될 것

expect(results_table).to RSpec.all(have_selector('td:nth-child(4)', text: expected_date)) 
+0

밝혀졌습니다. 필자는 필자가 필요로하지 않는 것을 복잡하게 만들었으며, 필자는 테스트 기준을 다시 작성했습니다. – Tom