2009-10-24 12 views
19

Tengo una tabla Cucumber, uno de los campos es una fecha que me gustaría haber rellenado con la fecha de hoy. ¿Hay alguna manera de hacerlo sin tener que codificar la fecha de hoy en la tabla?Datos dinámicos en las tablas de pepino

Básicamente me gustaría ingresar Time.now.strftime("%Y-%m-%d") en la tabla y no romperla.

+0

Nota: Sí, ya sé cómo hacer clic en una etiqueta . Me estoy haciendo el tonto para mostrar la importancia de: capitalización adecuada, proporcionar contexto en una pregunta, etiquetar correctamente ... – PhiLho

+0

Una búsqueda rápida con Google sugiere que BDD y Cucumber están relacionados con Ruby on Rails, lo que podría ser obvio si te mueves en esos círculos, pero no si no lo haces. –

+3

El pepino está realmente relacionado con el rubí, no con el RoR. Los desarrolladores de non rails lo usan para probar su código. Lo uso para probar código Java. Y BDD no está relacionado con Rails, es el desarrollo impulsado por el comportamiento, un estilo diferente de TDD, desarrollo impulsado por prueba. –

Respuesta

21

Como la tabla está siendo procesada por su definición de paso, puede poner un marcador especial en la tabla, como la cadena "TODAYS_DATE", y luego usar map_column! para procesar los datos en la columna al formato que desee .

Por ejemplo, dada la siguiente tabla

Given the following user records 
    | username | date  | 
    | alice | 2001-01-01 | 
    | bob  | TODAYS_DATE | 

En su definición de paso que tendría

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 esto sólo cambia los valores cuando se pide el hash. table y table.raw seguirán siendo los mismos, pero cada vez que necesites los hashes de fila, serán convertidos por el código dentro de map_column.

+0

Perfecto, exactamente lo que estaba buscando. Gracias. – KJF

4

La respuesta de bodnarbm es bastante buena si eso es lo que quieres hacer. Mi propia sugerencia sería echar un vistazo al timecop gem. Úselo para establecer la hora a un día conocido y luego ajuste sus tablas en consecuencia.

+0

Joya genial, definitivamente puedo pensar en algunos usos para ella en mis proyectos de código actuales. –

7

Yo sé que ha sido las edades desde que se hizo esta pregunta pero yo estaba haciendo algo similar con Pepino recientemente así que aquí tiene una solución alternativa, si alguien está interesado ...

Given the following user records 
| username | date        | 
| bob  | Time.now.strftime("%Y-%m-%d") | 

Y luego, en su definición de paso acaba de eval () la cadena de fecha

Given /^the following user records$/ do |table| 
    table.hashes.each do |hash| 
    date = eval(hash["date"]) 
    end 
end 

Aunque a diferencia ejemplo de Brandon esta no va dejar que se pone en fechas exactas, así sin más algo de lógica.

+0

Buena solución. Me gusta esto. – KJF

+0

¿no debería ser hash ["date"] = eval (hash ["date"])?Funcionó de esa manera para mí – santuxus

+0

Desafortunadamente, esto no funciona para el caso dado por el OP que contiene una entrada '2001-01-01' - esto evalúa a 1999, ya que es simplemente simple aritmética de enteros. Tendría que poner algo como Date.parse ('2001-01-01') en su tabla para obtener el resultado general. – JESii

0

Sobre la base de los archivos accesorios creé este código:

Característica:

Given the following "Inquirers": 
    | id | email     | start_date  | 
    | 1 | [email protected] | <%= Time.now %> | 

Ayudante:

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 
Cuestiones relacionadas