質問

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

基本的には、 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の答えは、それがあなたがやりたいことならかなり良いです。私自身の提案は、 timecop gem 。それを使用して時刻を既知の日に設定し、それに応じてテーブルを調整します。

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

機能:

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