Datos dinámicos en tablas de pepino.
Pregunta
Tengo una tabla Pepino , uno de los campos es una fecha en la que me gustaría haber completado 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.
Solución
Dado que 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!
Otros consejos
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 te permitirá ingresar fechas exactas sin más lógica.
bodnarbm es bastante buena si eso es lo que quieres hacer. Mi sugerencia sería echar un vistazo a la timecop gem . Úselo para ajustar la hora a un día conocido y, a continuación, ajuste sus tablas en consecuencia.
Basándome en los archivos de accesorios, creé este código:
Característica:
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