Chciałbym wiedzieć o idiomach lub sprawdzonych procedurach testowania wieloetapowego przepływu pracy za pomocą rspec.testowanie wieloetapowego przepływu pracy w rspec
Weźmy jako przykład system „koszyk”, gdzie proces zakupu może być
- gdy użytkownik wysyła do kosza i nie używamy https, przekierowanie do https
- gdy użytkownik przedkłada koszyk i używamy https i nie ma pliku cookie, tworzymy i wyświetlamy nowy koszyk i odsyłasz ciasteczko
- , gdy użytkownik przesyła do koszyka i używamy https i jest ważny plik cookie, a nowy element dotyczy innego produkt niż pierwszy element, dodaj linię do kosza i wyświetl obie linie:
- , gdy użytkownik przesyła do koszyka i używamy https, a plik cookie jest poprawny, a nowa pozycja dotyczy tego samego produktu co poprzednia, należy zwiększyć ilość linii koszyka i wyświetlić obie linie:
- , gdy użytkownik kliknie przycisk "Kasa" na stronie koszem i jest przy użyciu protokołu hTTPS i jest ciasteczka i kosz jest niepusty i ...
- ...
Czytałem http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/ który doradza m.in., że każdy „blokować” powinien zawierać tylko jedno twierdzenie: zamiast wykonywać obliczenia, a następnie testować kilka atrybutów w tym samym bloku, użyj "przed" wewnątrz kontekstu, aby utworzyć (lub pobrać) testowany obiekt i przypisać go do @some_instance_variable, następnie napisz każdy test atrybutów jako osobny blok. To trochę pomaga, ale w przypadku opisanym powyżej, gdzie etap testowania n wymaga wykonania całej konfiguracji dla kroków [1..n-1], znajduję się albo powielony kod instalacyjny (oczywiście nie jest dobry) albo tworzony jest wiele funkcji pomocniczych z coraz bardziej nieporęcznymi nazwami (def create_basket_with_three_lines_and_two_products) i wywoływanie ich kolejno w każdym kroku przed blokiem.
Jakieś wskazówki, jak to zrobić mniej gadatliwie/żenująco? Doceniam ogólną zasadę, według której każdy przykład nie powinien zależeć od stanu pozostawionego przez poprzednie przykłady, ale kiedy testujesz wieloetapowy proces i wszystko może pójść źle na każdym kroku, konfigurowanie kontekstu dla każdego kroku to nieuchronnie wymagać będzie ponownego uruchomienia całego zestawu dla poprzednich n kroków, więc ...
teraz, gdy już użyłeś klejnotu kroków rspec, jesteś zadowolony z wyniku, aby rozwiązać problem z wielostopniowym szacunkiem? – Angela
@Angela: Hmm, dobre pytanie. Użyłem go krótko, ale reszta grupy nie była tym zainteresowana, więc skończyło się na odrzuceniu go i większej duplikacji. * Myślę, że * uzasadnieniem było to, że potrzebowaliśmy większej czytelności, ale to był DUŻY czas ... W tym momencie stwierdzam, że prawdziwe testy integracyjne są najłatwiejsze po prostu pisać jako duże funkcje, które wykonują pojedynczy "workflow" na test. Nie najbardziej idiomatyczne lub popularne podejście, ale lubię czytelność. – Nerdmaster
Widzę więc jeden "opis" w rspec? – Angela