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')的内容才能得到一般结果。