Cucumber 黄瓜表中的动态数据

Cucumber 黄瓜表中的动态数据,cucumber,bdd,Cucumber,Bdd,我有一个表,其中一个字段是一个日期,我想用今天的日期填充它。 有没有一种方法可以做到这一点,而不必将今天的日期硬编码到表中 基本上,我想在表中输入Time.now.strftime(“%Y-%m-%d”)。由于表是由步骤定义处理的,您可以在表中放置一个特殊的占位符,例如字符串“TODAYS\u DATE”,然后使用map\u列将列中的数据处理为所需的格式 下表给出了一个示例 Given the following user records | username | date |

我有一个表,其中一个字段是一个日期,我想用今天的日期填充它。 有没有一种方法可以做到这一点,而不必将今天的日期硬编码到表中


基本上,我想在表中输入
Time.now.strftime(“%Y-%m-%d”)

由于表是由步骤定义处理的,您可以在表中放置一个特殊的占位符,例如字符串“TODAYS\u DATE”,然后使用
map\u列
将列中的数据处理为所需的格式

下表给出了一个示例

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_列中的代码转换

bodnarbm的答案很好,如果你想这么做的话。我个人的建议是看一看。使用它将时间设置为已知的一天,然后相应地调整您的表格。

我知道这个问题已经问了很久了,但我最近也在用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的示例不同,如果没有进一步的逻辑,这也不能让您输入准确的日期。

基于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

注意:是的,我知道如何点击标签。我装聋作哑是为了表明以下几点的重要性:适当的大写字母、在问题中提供上下文、正确的标记……谷歌的快速搜索表明BDD和Cucumber与Ruby on Rails相关——如果你在这些圈子里移动,这可能是显而易见的,但如果你不移动,就不会。Cucumber实际上与Ruby相关,而不是RoR。非rails开发人员使用它来测试他们的代码。我用它来测试Java代码。BDD与Rails无关,它是行为驱动开发,与TDD、测试驱动开发不同。酷炫的gem,我肯定能想到它在我当前的代码项目中的一些用途。完美,正是我想要的。谢谢。应该是hash[“date”]=eval(hash[“date”])吗?它对我来说是这样的不幸的是,这不适用于OP给出的案例,它包含一个条目“2001-01-01”-这评估到1999年,因为它只是一个简单的整数运算。您必须在表中输入类似Date.parse('2001-01-01')的内容才能得到一般结果。