Données dynamiques dans les tables de concombres
Question
J'ai une table Cucumber , l'un des champs est une date à laquelle j'aimerais que vous remplissiez la date du jour. . Y a-t-il un moyen de faire cela sans avoir à coder de manière stricte la date d'aujourd'hui dans la table?
En gros, j'aimerais entrer Time.now.strftime ("% Y-% m-% d")
dans la table et ne pas la rompre.
La solution
Étant donné que la table est traitée par votre définition d'étape, vous pouvez placer un espace réservé spécial, tel que la chaîne "TODAYS_DATE", puis utiliser map_column!
pour traiter les données. dans la colonne au format souhaité.
Par exemple, à l'aide du tableau suivant
Given the following user records
| username | date |
| alice | 2001-01-01 |
| bob | TODAYS_DATE |
Dans votre définition de l'étape, vous auriez
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
Notez que cela ne change les valeurs que lorsque vous demandez le hachage. table et table.raw resteront les mêmes, mais chaque fois que vous aurez besoin des hachages de lignes, ils seront convertis par le code contenu dans map_column!
Autres conseils
Je sais que cela fait des siècles que cette question a été posée, mais je faisais quelque chose de similaire avec Cucumber récemment. Voici donc une solution alternative si quelqu'un est intéressé ...
Given the following user records
| username | date |
| bob | Time.now.strftime("%Y-%m-%d") |
Ensuite, dans votre définition d'étape, eval () indique simplement la chaîne de date
Given /^the following user records$/ do |table|
table.hashes.each do |hash|
date = eval(hash["date"])
end
end
Bien que, contrairement à l'exemple de Brandon, cela ne vous permette pas d'indiquer des dates exactes sans autre logique.
La réponse de bodnarbm est plutôt bonne si c'est ce que vous voulez faire. Ma propre suggestion serait de jeter un coup d'œil au gem timecop . Utilisez-le pour définir l'heure d'un jour connu, puis ajustez vos tables en conséquence.
Sur la base des fichiers de fixtures, j'ai créé ce code:
Fonctionnalité:
Given the following "Inquirers":
| id | email | start_date |
| 1 | alberto@deco.proteste.pt | <%= Time.now %> |
Aide:
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