used the test tag run hooks from for feature and after cucumber bdd

cucumber - the - Datos dinámicos en tablas de pepino.



run cucumber feature from command line (4)

Tengo una tabla de Cucumber , uno de los campos es una fecha que me gustaría haber completado con la fecha de hoy. ¿Hay alguna forma de hacer esto sin tener que codificar la fecha de hoy en la tabla?

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


Basándome en archivos de fixtures he creado 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


Como la definición de pasos está procesando la tabla, puede colocar un marcador de posición 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 tu definición de paso tendrías

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

Tenga en cuenta que esto solo cambia los valores cuando solicita el hash. table y table.raw seguirán siendo los mismos, pero siempre que necesite los hashes de fila, ¡serán convertidos por el código dentro de map_column!


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


Sé que han pasado años desde que se hizo esta pregunta, pero recientemente estaba haciendo algo similar con Cucumber, así que aquí hay 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 solo 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 del ejemplo de Brandon, esto no le permitirá ingresar fechas exactas sin más lógica.