Подтвердить что ты не робот

Динамические данные в таблицах огурца

У меня есть таблица Cucumber, одно из полей - это дата, которую я хотел бы заполнить с сегодняшней датой. Есть ли способ сделать это без необходимости жесткого кода сегодняшней даты в таблице?

В принципе, я хотел бы ввести Time.now.strftime("%Y-%m-%d") в таблицу и не прерывать ее.

4b9b3361

Ответ 1

Поскольку таблица обрабатывается вашим определением шага, вы можете поместить в таблицу специального владельца места, например строку "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!

Ответ 2

Я знаю, что прошло столько времени, как задавался этот вопрос, но я недавно делал что-то подобное с 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

Несмотря на то, что в отличие от примера Брэндона, это не позволит вам вводить точные даты без какой-либо дополнительной логики.

Ответ 3

Ответ bodnarbm довольно хорош, если это то, что вы хотите сделать. Мое собственное предположение было бы взглянуть на timecop gem. Используйте его, чтобы установить время на известный день, затем соответствующим образом скорректируйте свои таблицы.

Ответ 4

На основе файлов настроек я создал этот код:

Характеристика:

Given the following "Inquirers":
  | id | email                    | start_date        |
  |  1 | [email protected] | <%= 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