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.

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top