2012-07-01 20 views
7

Mam następujący Transform:Ogórek: Jak używać tego samego wyrażenia regularnego w różnych przekształceniach?

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

który współpracuje z definicji kroku jak to:

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

Mam również definicja krok, który używa tego samego "([^"]+)" Phase wzoru:

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

Tutaj nie chcę, aby definicja kroku zawodziła, jeśli określone fazy nie istnieją. Zamiast tego chciałbym utworzyć fazy.

Chciałbym stworzyć transformację, która stworzy dla mnie fazę SUMOWANIA nieco definicji kroków, ale nie mogę tego zrobić, ponieważ mam już wspomnianą Transform, która ma dokładnie to samo wyrażenie regularne.

Zasadniczo, chciałbym utworzyć fazę, jeśli jest to krok Given, i podnieść niepowodzenie, jeśli tak nie jest.

Wszelkie pomysły?

+2

+1 Tylko dla tytułu. Byłby to dobry film. –

Odpowiedz

4

Jeśli wyrażenia regularne są takie same, to tak naprawdę nie ma opcji rozróżnienia zachowania. Ustalenie, czy nie jesteś w Given kroku potędze być możliwe, ale nawet jeśli tak, to byłoby jakieś bardzo dobrze ukryty magiczny z potencjałem na przyszłość zaskoczyć czytelników i autorów scenariuszy ...

Najprostszym , a większość tego sposobu na ujawnienie intencji byłoby wyraźnym określeniem charakteru frazy w języku kroku, wtedy możesz mieć 2 wyraźnie rozdzielone transformacje, np.

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 
Powiązane problemy