Вопрос

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

В принципе, я хотел бы войти 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top