Динамические данные в таблицах огурцов - PullRequest
19 голосов
/ 24 октября 2009

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

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

Ответы [ 4 ]

21 голосов
/ 24 октября 2009

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

7 голосов
/ 19 апреля 2011

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

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

4 голосов
/ 24 октября 2009

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

0 голосов
/ 17 февраля 2016

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

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

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
...