Динамические данные в таблицах Cucumber
Вопрос
У меня есть Огурец таблица, одно из полей которой является датой, которую я хотел бы заполнить сегодняшней датой.Есть ли способ сделать это без необходимости жестко закодировать сегодняшнюю дату в таблице?
В принципе, я хотел бы войти Time.now.strftime("%Y-%m-%d")
в стол и не допустить, чтобы он сломался.
Решение
Поскольку таблица обрабатывается по определению шага, вы можете поместить в таблицу специальный заполнитель, например строку " TODAYS_DATE ", а затем использовать map_column!
для обработки данных. в столбце в нужный формат.
Например, с учетом следующей таблицы
Given the following user records
| username | date |
| alice | 2001-01-01 |
| bob | TODAYS_DATE |
В вашем определении шага у вас будет
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
Обратите внимание, что это меняет значения только тогда, когда вы запрашиваете хэш. table и table.raw останутся прежними, но всякий раз, когда вам понадобятся хэши строк, они будут преобразованы кодом внутри map_column! Р>
Другие советы
Я знаю, что прошло уже много лет с тех пор, как был задан этот вопрос, но я недавно делал что-то похожее с Cucumber, так что вот альтернативное решение, если кому-то интересно ...
Given the following user records
| username | date |
| bob | Time.now.strftime("%Y-%m-%d") |
И тогда в вашем определении шага просто eval () строка даты
Given /^the following user records$/ do |table|
table.hashes.each do |hash|
date = eval(hash["date"])
end
end
Хотя, в отличие от примера Брэндона, это не позволит вам указывать точные даты без какой-либо дополнительной логики.
Ответ bodnarbm довольно хорош, если вы хотите именно этого. Мое собственное предложение состояло бы в том, чтобы взглянуть на драгоценный камень таймкопа . Используйте его, чтобы установить время для известного дня, а затем соответствующим образом скорректируйте свои таблицы.
Основываясь на файлах fixtures, я создал этот код:
Особенность:
Given the following "Inquirers":
| id | email | start_date |
| 1 | alberto@deco.proteste.pt | <%= Time.now %> |
Помощник:
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