2009-10-24 3 views
19

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

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

+0

Примечание: да, я знаю, как нажать на тег , Я играю глупо, чтобы показать важность: правильной капитализации, предоставления контекста в вопросе, правильной маркировки ... – PhiLho

+0

Быстрый поиск в Google предполагает, что BDD и Cucumber связаны с Ruby on Rails - которые могут быть прозрачно очевидны, если вы переходите в этих кругах, но нет, если вы этого не сделаете. –

+3

Огурец на самом деле связан с рубином, а не с RoR. Разработчики non-rails используют его для проверки своего кода. Я использую его для проверки кода Java. И BDD не связан с Rails, это Behavioral Driven Development, отличающийся от TDD, Test Driven Development. –

ответ

21

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

+0

Отлично, именно то, что я искал. Благодарю. – KJF

4

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

+0

Прохладный камень, я определенно могу подумать о некоторых его применениях в моих текущих проектах кода. –

7

Я знаю, что это было возрасты, так как этот вопрос был задан вопрос, но я делал нечто подобное с огурцом в последнее время, так вот альтернативное решение, если кто-либо заинтересован ...

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 

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

+0

Хорошее решение. Мне это нравится. – KJF

+0

не должен быть хэш ["date"] = eval (hash ["date"])?это сработало для меня – santuxus

+0

К сожалению, это не работает в случае, заданном OP, который содержит запись «2001-01-01» - это указывает на 1999 год, поскольку это просто простая целочисленная арифметика. Вам нужно будет положить что-то вроде Date.parse ('2001-01-01') в таблицу, чтобы получить общий результат. – JESii

0

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

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

Given the following "Inquirers": 
    | id | email     | start_date  | 
    | 1 | [email protected] | <%= 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 
Смежные вопросы