时间戳Ruby Capybara Cucumber

时间:2016-04-12 10:15:19

标签: ruby cucumber capybara

我有一个测试,在成功交易后生成参考编号。在该参考编号内是(hhmmss)的时间戳。此时间戳是在用户按下提交时捕获的,而不是在出现确认页面且参考号可见时捕获的。出于这个原因,我不能使用Time.now,因为它总是错误的。

我想做的(如果可能的话)是创建一个确认测试,我在参考编号内查看并确认时间戳在x和y之间,y为x - 20秒(以便确认页面出现。)

参考的确认信息如下:

"Your transaction reference number is: 0 16123 #{timestamp} A1"

参考编号出现在句子的中间,所以我想按照以下方式编写:

expect('location-of-text').to have_text "Your transaction reference number is: 0 1612 {timestamp_range_here} A1"

我不确定是否可以做我需要的事情。

对解决方案的任何帮助都会很棒

2 个答案:

答案 0 :(得分:1)

您可以找到元素,提取文本,解析时间戳并检查它是否在您的范围内。我们假设您的原始字符串看起来像"Your transaction reference number is: 0 16123 120000 A1",那么您可以执行以下操作:

text = find(element, text: /Your transaction reference number is: 0 16123 .* A1/).text
timestamp = text[/0 16123 (.*) A1/, 1]        #=> 120000
time = DateTime.strptime timestamp, '%H%M%S'  #=> Tue, 12 Apr 2016 12:00:00 +0000
expect(time).to be_between(Time.now - 20.seconds, Time.now)

答案 1 :(得分:0)

假设在服务器端的记录中设置了时间,则更清洁的解决方案是使用Timecop gem在特定时间冻结测试,从而修复应在给定时间生成的字符串。