Chcę ponownie użyć niektórych kroków Cucumber, ale nie mogę znaleźć właściwej drogi.
Chcę napisać krok taki jak:
Given /^I login with (.*) credentials$/ |type|
# do stuff with type being one of "invalid" or "valid"
end
Ale potem wykonaj kolejny krok, taki jak:
Given /^I login successfully$
# call "Given I login with valid credentials"
end
Więc testując uwierzytelnianie użytkowników mogę skorzystać z tego pierwszego, ale w większości innych miejsc mogę użyć drugiego i właściwie nie muszę ponownie odtwarzać kodu.
Czy istnieje sposób na wywołanie tego innego kroku, czy po prostu umieszczam logikę w metodzie pomocniczej i wywołuję tę metodę z każdego zadania (w zasadzie refaktoryzacja ekstrakcji metody, która po przeczytaniu mojego pytania sprawia, że wierzę, że to właściwie najlepszy sposób tak czy siak)?
do
wymaganą do rozpoczęciado...end
bloku w definicji kroku Rubiego. W rzeczywistości jest to wymagane.Odpowiedzi:
AKTUALIZACJA : metoda opisana poniżej jest przestarzała. Zalecany sposób wywołania kroku z poziomu innego kroku wygląda teraz następująco:
Stara, przestarzała metoda (w celach informacyjnych):
Możesz wywołać kroki z innych kroków, takich jak ten:
Jeśli wszystkie scenariusze w ramach funkcji wymagają tego (lub innych kroków), możesz również dodać Tło do każdej funkcji, wykonując typowe czynności, takie jak:
źródło
steps %Q{Given I am logged in}
steps
metoda nie istniała. Zobacz moją odpowiedź poniżej.Zwróć uwagę, że metoda wywoływania kroków w krokach zmieniła się w ostatnich wersjach ogórka, co zobaczysz, jeśli pojawi się błąd typu „OSTRZEŻENIE: używanie„ Podano / Kiedy / Wtedy ”w definicjach kroków jest przestarzałe, użyj„ krok ”, aby zamiast tego wywołaj inne kroki: /path/to/step_definitions/foo_steps.rb: 631: in `block in ''. Zobacz wiki ogórka, aby uzyskać szczegółowe informacje.
Istotą zmiany jest to, że należy teraz użyć metod
step
lubsteps
.źródło
syntax error, unexpected tIDENTIFIER, expecting keyword_end
stackoverflow.com/questions/43319331/ ...Nazywanie kroków z definicji kroków jest złą praktyką i ma pewne wady :
Aslak Hellesøy zaleca wyodrębnienie popularnych działań do świata zamiast ponownego wykorzystywania kroków. Izoluje te akcje w jednym miejscu, dzięki czemu ten kod jest łatwiejszy do znalezienia. Możesz również wyodrębnić kod do zwykłych klas lub modułów Rubiego.
Oto przydatna dyskusja na ten temat na liście mailingowej Cucumber - link
źródło
Najlepiej zawijaj kroki w% {} zamiast w cudzysłów. W takim przypadku nie musisz zmieniać cudzysłowów, których będziesz musiał często używać .:
źródło
Ponownie użyj słów kluczowych w pliku funkcji, co zapewni możliwość ponownego wykorzystania kodu.
Zdecydowanie NIE zaleca się wywoływania definicji kroków w ramach definicji kroków.
Zapisałbym swój plik funkcji w ten sposób,
W mojej definicji kroku (to jest Java)
W ten sposób istnieje wiele możliwości ponownego wykorzystania kodu. Twoje same Given i Then obsługują zarówno prawidłowe, jak i nieprawidłowe scenariusze. Jednocześnie twój plik funkcji ma sens dla czytelników.
źródło