2017-04-20 1 views
0

Es scheint sehr schwierig zu sein, Dokumentation über Gherkin nachzuschlagen, also habe ich mich gefragt, ob es eine Möglichkeit gibt, Schrittdefinitionen zu erweitern, damit der Tester korrekte Grammatik verwenden kann. Ein Beispiel, das zeigt, was ich meine ist:Verwenden der richtigen Grammatik in Gherkin

...Testing... 
Then I see there is 1 item 
...More testing... 
Then I see there are 2 items 

Offensichtlich würden diese beiden Schritte den gleichen Code verwenden. I definiert einen Schritt Definition wie diese, die fast funktioniert:

Then(/^I see there (is|are) (\d+) item(s)?$/) do |item_count| 
    ...code... 
end 

Außer dem Problem ist, dass es is/are und die optionale Plural s als Argumente interpretiert. Gibt es irgendeine Möglichkeit, Gherkin zu signalisieren, dass diese nur dazu dienen, eine korrekte Grammatik zuzulassen?

Antwort

2

Verwenden?: Am Anfang der Gruppe markiert es als nicht erfassbar, Gurke wird es nicht als Argument übergeben.

/^I see there (?:is|are) (\d+) item(?:s)?$/ 
1

Diese Schritte müssen nicht denselben Code verwenden. Stattdessen können sie denselben Code aufrufen. Wenn Sie dieses Muster anwenden, können Sie sich dann auf Ihre Schritte konzentrieren, indem Sie nur die einzige Sache tun, die sie tun sollten, die gut ausgedrückte natürliche Sprache verwendet, um Code zu feuern. So ...

module ItemStepHelper 
    def see_items(count:) 
    ... 
end 
World ItemStepHelper 

Then 'I see there is one item' do 
    see_items(count: 1) 
end 

Then 'I see there are \d+ items' do |count| 
    see_items(count: count) 
end 

Jetzt offensichtlich mit diesem Beispiel das ist ein bisschen mehr vorformulierten für sehr wenig Nutzen, aber wenn man das Muster auf realistischere Beispiele gelten dann beginnen die Vorteile wirklich zu treten. Insbesondere die Sie nie Ich muss eine wirklich komplexe Regex für Step-Definitionen schreiben (in der Praxis verwenden 90% oder mehr meiner Step-Defs nicht einmal eine Regex).