2012-07-01 5 views
7

Ich habe folgende Transformation:Gurke: Wie man die gleiche Regex in verschiedenen Transformationen verwendet?

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

die wie folgen mit Schritt Definition funktioniert:

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

Ich habe auch die folgenden Schritt Definition, die die gleichen "([^"]+)" Phase Muster verwendet:

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

Hier möchte ich nicht, dass die Schrittdefinition fehlschlägt, wenn die angegebenen Phasen nicht existieren. Ich möchte stattdessen die Phasen erstellen.

Ich möchte eine Transformation erstellen, die die Phase für mich erstellen wird, um die Schrittdefinitionen ein wenig zu trocknen, aber ich kann das nicht tun, weil ich bereits die oben erwähnte Transformation habe, die genau die gleiche Regexp hat.

Grundsätzlich möchte ich die Phase erstellen, wenn es ein Given Schritt ist, und erhöhen Sie scheitern, wenn es nicht ist.

Irgendwelche Ideen?

+2

+1 Nur für den Titel. Wäre ein guter Film. –

Antwort

4

Wenn die Regexps die gleichen sind, dann haben Sie nicht wirklich eine Option, um das Verhalten zu unterscheiden. Die Bestimmung, ob Sie in einer Given Schritt Macht sind möglich sein, aber auch so, wenn, würde es einig sehr gut versteckte Magie mit dem Potential für zukünftige Leser und Autoren Szenario zu überraschen ...

Die einfachste , und die meisten Absicht-aufdeckenden Weg, dies zu tun wäre, die Art der Phrase in der Schrittsprache explizit anzugeben, dann können Sie 2 klar getrennte Transformationen haben, z

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