我在这里看到了一些关于日期范围的类似问题,但似乎没有一个解决方案对我有用。 我要做的是将日期范围设置为一个月,并确认今天的日期是否在该范围内。 最终,这将被放入一年中每个月的情况方法中,因为我正在测试的功能是特定于日期的。
我尝试将日期转换为整数以使计算更容易(或者我认为如此),然后使用 between?
检查日期范围。
这是我的代码:
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
当每个变量都有一个放置时,这是输出:
Today = 1468479863
month_start = 1451606400
month_end = 1454198400
如您所见,这应该会失败,因为今天不在日期范围之间,它远远超出了日期范围。然而,测试正在变为绿色,这表明我包含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
您的测试通过,因为如果today.between?(month_start,month_end)
返回 false,则不会运行任何期望!
您可能需要考虑将 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')
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
我认为你输入错误:
month_end = Time.parse('1 Jan 2016').to_i
不应该是'31 Jan 2016'
吗?
您的整个测试似乎有点混乱 - 我认为从步骤的描述来看,您真正想要的是
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.每个块也可以写成
expect(results_table).to RSpec.all(have_selector('td:nth-child(4)', text: expected_date))