2012-07-01 22 views
7

tengo el siguiente Transformar:Pepino: ¿Cómo usar la misma expresión regular en diferentes transformaciones?

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

que trabaja con definición de paso como esto:

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

tengo también la siguiente definición de paso que utiliza el mismo "([^"]+)" Phase patrón:

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

Aquí no quiero que la definición del paso falle si las fases especificadas no existen. Me gustaría crear las fases en su lugar.

Me gustaría crear una Transformación que creará la fase para mí para SECAR las definiciones de paso un poco, pero no puedo hacerlo porque ya tengo la Transformación mencionada anteriormente que tiene exactamente la misma expresión regular.

Básicamente, me gustaría crear la fase si es un paso Given, y subir fallar si no lo es.

¿Alguna idea?

+2

+1 Solo para el título. Sería una buena película –

Respuesta

4

Si las expresiones regulares son iguales, entonces realmente no tiene una opción para diferenciar el comportamiento. La determinación de si está o no está en una etapa Givenfuerza sea posible, pero incluso si es así, sería algo de magia muy bien escondida con el potencial para sorprender a los lectores y los autores escenario futuro ...

La forma más fácil , y la forma más reveladora de la intención de hacer esto sería declarar explícitamente la naturaleza de la Frase en el lenguaje de paso, entonces puedes tener 2 transformadas claramente separadas, por ejemplo

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 
Cuestiones relacionadas