Dati dinamici nelle tabelle dei cetrioli
Domanda
Ho una Tabella del cetriolo , uno dei campi è una data che vorrei avere popolata con la data odierna . C'è un modo per farlo senza dover codificare la data odierna nella tabella?
Fondamentalmente vorrei inserire Time.now.strftime ("% Y-% m-% d ")
nella tabella senza interromperlo.
Soluzione
Poiché la tabella viene elaborata dalla definizione del passaggio, è possibile inserire un segnaposto speciale nella tabella, ad esempio la stringa " TODAYS_DATE " ;, quindi utilizzare map_column!
per elaborare i dati nella colonna nel formato desiderato.
Ad esempio data la seguente tabella
Given the following user records
| username | date |
| alice | 2001-01-01 |
| bob | TODAYS_DATE |
Nella definizione del tuo passaggio avresti
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
Nota che cambia i valori solo quando chiedi l'hash. table e table.raw rimarranno gli stessi, ma ogni volta che avrai bisogno degli hash delle righe, saranno convertiti dal codice all'interno di map_column!
Altri suggerimenti
So che sono passati anni da quando questa domanda è stata posta, ma recentemente ho fatto qualcosa di simile con Cucumber, quindi ecco una soluzione alternativa se qualcuno è interessato ...
Given the following user records
| username | date |
| bob | Time.now.strftime("%Y-%m-%d") |
E poi nella definizione del tuo passo basta eval () la stringa della data
Given /^the following user records$/ do |table|
table.hashes.each do |hash|
date = eval(hash["date"])
end
end
Anche se a differenza dell'esempio di Brandon, questo non ti permetterà di inserire anche date esatte senza ulteriore logica.
La risposta di bodnarbm è piuttosto buona se è quello che vuoi fare. Il mio suggerimento sarebbe quello di dare un'occhiata al gemma timecop . Usalo per impostare l'ora di un giorno noto, quindi modifica le tue tabelle di conseguenza.
Basato su file di dispositivi ho creato questo codice:
Caratteristica:
Given the following "Inquirers":
| id | email | start_date |
| 1 | alberto@deco.proteste.pt | <%= Time.now %> |
Helper:
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