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.