7

私は次の変換を持っています:

Transform /^"([^"]+)" Phase$/ do |name|
  # Returns the phase named 'name',
  # or raises an exception if it doesn't exist
end

次のようなステップ定義で機能します。

Then /("(?:[^"]+)" Phase) should do something/ do |phase|
  # Should fail if the specified phase doesn't exist
end

"([^"]+)" Phase同じパターンを使用する次のステップ定義もあります。

Given /("([^"]+)" Phase) follows ("([^"]+)" Phase)/ do |pre, post|
  # Should create the specified phases 
end

ここでは、指定されたフェーズが存在しない場合にステップ定義が失敗しないようにします。代わりにフェーズを作成したいと思います。

ステップ定義を少し DRY するためのフェーズを作成する Transform を作成したいのですが、まったく同じ正規表現を持つ上記の Transform が既にあるため、作成できません。

基本的にはGivenステップであればフェーズを作り、そうでなければfailを上げたいと思っています。

何か案は?

4

1 に答える 1

4

正規表現が同じである場合、動作を区別するオプションは実際にはありません。Givenステップにいるかどうかを判断することは可能かもしれませんが、可能だとしても、将来の読者やシナリオ作成者を驚かせる可能性のある非常によく隠された魔法になるでしょう...

これを行うための最も簡単で最も意図を明らかにする方法は、ステップ言語でフレーズの性質を明示的に述べる方法です。

EXISTING_PHASE = Transform /^existing Phase "([^"]+)"$/ do |phase|
    # raise error if it doesn't exist
end

UNEXISTING_PHASE = Transform /^unknown Phase "([^"]+)"$/ do |phase|
    # create the phase if it doesn't exist
end
于 2012-07-16T15:18:35.330 に答える