我有一个Cucumber表,其中一个字段是我想用今天的日期填充的日期。有没有办法做到这一点而不必将今天的日期硬编码到表格中?
基本上我想进入Time.now.strftime("%Y-%m-%d")
桌子而不让它休息。
由于您的步骤定义正在处理表格,您可以在表格中放置一个特殊的占位符,例如字符串“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 中的代码转换!
我知道自从提出这个问题以来已经有很长时间了,但我最近对 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 的示例不同,这不会让您在没有进一步逻辑的情况下也输入确切的日期。
如果这是您想要做的,bodnarbm 的答案非常好。我自己的建议是看看timecop gem。使用它将时间设置为已知日期,然后相应地调整您的表格。
基于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