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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top