21

我有一个Cucumber表,其中一个字段是我想用今天的日期填充的日期。有没有办法做到这一点而不必将今天的日期硬编码到表格中?

基本上我想进入Time.now.strftime("%Y-%m-%d")桌子而不让它休息。

4

4 回答 4

23

由于您的步骤定义正在处理表格,您可以在表格中放置一个特殊的占位符,例如字符串“TODAYS_DATE”,然后用于map_column!将列中的数据处理为您想要的格式。

例如给出下表

Given the following user records
  | username | date        |
  | alice    | 2001-01-01  |
  | bob      | TODAYS_DATE |

在您的步骤定义中,您将拥有

Given /^the following user records$/ do |table|
  table.map_column!('date') do |date| 
    if date == 'TODAYS_DATE'
      date = Time.now.strftime("%Y-%m-%d")
    end
    date
  end
  table.hashes.each do |hash|
    #Whatever you need to do
  end
end

请注意,这只在您要求哈希时更改值。table 和 table.raw 将保持不变,但是当您需要行哈希时,它们将由 map_column 中的代码转换!

于 2009-10-24T16:09:31.270 回答
8

我知道自从提出这个问题以来已经有很长时间了,但我最近对 ​​Cucumber 做了类似的事情,所以如果有人感兴趣,这里有一个替代解决方案......

Given the following user records
 | username | date                             |
 | bob      | Time.now.strftime("%Y-%m-%d")    |

然后在您的步骤定义中,只需 eval() 日期字符串

Given /^the following user records$/ do |table|
  table.hashes.each do |hash|
    date = eval(hash["date"])
  end
end

尽管与 Brandon 的示例不同,这不会让您在没有进一步逻辑的情况下也输入确切的日期。

于 2011-04-19T03:44:09.053 回答
4

如果这是您想要做的,bodnarbm 的答案非常好。我自己的建议是看看timecop gem。使用它将时间设置为已知日期,然后相应地调整您的表格。

于 2009-10-24T16:17:54.513 回答
0

基于fixtures文件我创建了这个代码:

特征:

Given the following "Inquirers":
  | id | email                    | start_date        |
  |  1 | alberto@deco.proteste.pt | <%= Time.now %>   |

帮手:

Given(/^the following "(.*?)":$/) do |model, table|
  table.hashes.each do |hash|
    attributes = Rack::Utils.parse_nested_query(hash.to_query)
    object     = model_name.classify.constantize.new

    attributes.keys.each do |key|
      object.send("#{key}=", ERB.new(value).result())
    end
    ...
  end
end
于 2016-02-17T13:17:13.240 回答