2012-07-01 15 views
7

Ben şu Transform: Böyle Adım tanımında ile çalışırSalatalık: Farklı dönüşümlerde aynı regex nasıl kullanılır?

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 

var aynı "([^"]+)" Phase desen kullanır ayrıca aşağıdaki adımı tanımı:

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

Burada, belirtilen aşamalar mevcut değilse adım tanımının başarısız olmasını istemiyorum. Bunun yerine aşamaları oluşturmak istiyorum.

Adım tanımları biraz DRY benim için faz oluşturacak bir Dönüşüm oluşturmak istiyorum, ancak bunu hemen hemen aynı regexp olan yukarıda belirtilen Dönüşüm var çünkü yapamıyorum.

Temel olarak, bir Given adımı ise fazı oluşturmak ve değilse başarısızlığı artırmak istiyorum.

Herhangi bir fikrin var mı?

+2

+1 Sadece başlık için. Güzel bir film olur. –

cevap

4

Normal ifadeler aynıysa, davranışı ayırt etme seçeneğiniz yoktur. Bir Given adım kudretiyle sen olsun veya olmasın belirlenmesi mümkün, ama buna rağmen, eğer

en kolay ... okuyucular ve senaryo yazarları gelecek sürpriz potansiyeli olan bazı çok iyi gizlenmiş sihirli olacağını ve bunu yapmak için en iyi niyet verici yol, İfadenin niteliğini adım dilinde açıkça belirtmek olacaktır, daha sonra 2 açıkça ayrıştırılmış dönüşüme sahip olabilirsiniz.

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