21

私はキュウリのテーブルを持っています。フィールドの1つは、今日の日付を入力したい日付です。今日の日付をテーブルにハードコーディングせずにこれを行う方法はありますか?

Time.now.strftime("%Y-%m-%d")基本的にはテーブルに入って、壊れないようにしたいと思います。

4

4 に答える 4

23

テーブルはステップ定義によって処理されているため、文字列「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内のコードによって変換されます。

于 2009-10-24T16:09:31.270 に答える
8

この質問が出されてから何年も経っていますが、最近キュウリと同じようなことをしていたので、興味があれば別の解決策を紹介します...

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

Brandonの例とは異なり、これでは、ロジックを追加しなくても正確な日付を入力することはできません。

于 2011-04-19T03:44:09.053 に答える
4

それがあなたがしたいことであるならば、bodnarbmの答えはかなり良いです。私自身の提案は、timecopgemを見てみることです。これを使用して時間を既知の日に設定し、それに応じてテーブルを調整します。

于 2009-10-24T16:17:54.513 に答える
0

フィクスチャファイルに基づいて、次のコードを作成しました。

特徴:

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
于 2016-02-17T13:17:13.240 に答える