Pracuję nad niektórymi historiami Ogórek dla aplikacji "zarejestruj się", która ma wiele kroków.Zmienne sesji z ogórkowymi historiami
Zamiast pisać opowiadanie Huuuuuuuge, aby objąć wszystkie kroki naraz, co byłoby złe, wolę pracować przez każdą akcję w kontrolerze jak zwykły użytkownik. Mój problem polega na tym, że przechowuję identyfikator konta, który jest tworzony w pierwszym kroku jako zmienna sesji, więc gdy krok 2, krok 3 itd. Są odwiedzane, ładowane są istniejące dane rejestracyjne.
Jestem świadomy, że mogę uzyskać dostęp do controller.session[..]
w specyfikacji RSpec, jednak gdy próbuję to zrobić w opowieści Cucumber nie powiedzie się z następującego błędu (i, I've również przeczytać gdzie to jest anty-wzór itp. ..)
Stosując controller.session [: niezależnie] lub [sesji: cokolwiek]
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.session (NoMethodError)
Stosując sesji: (co)
wrong number of arguments (1 for 0) (ArgumentError)
Wygląda na to, że przystąpienie do sesji nie jest możliwe. Co Zastanawiam się, czy to może być możliwe (i myślę, co byłoby najlepszym ..):
- Mock się sklep sesja itp
- mieć metodę w kontrolerze i skrótową że out (np
get_registration
która przypisuje zmiennej instancji ...)
ja przejrzałem książki RSpec (dobrze, odtłuszczone) i miał wygląd poprzez WebRat etc, ale ja naprawdę nie znalazłem odpowiedzi na mój problem ...
Aby wyjaśnić nieco więcej, proces rejestracji jest bardziej podobnie jak automat stanów - np. użytkownik postępuje przez cztery kroki, zanim rejestracja zostanie zakończona - stąd "logowanie" nie jest tak naprawdę opcją (łamie model działania witryny) ...
W mojej specyfikacji dla kontrolera byłem w stanie wyodrębnić wywołanie metody, która ładuje model w oparciu o sesję var - ale nie jestem pewien, czy linia 'antipattern' odnosi się również do kodów pośredniczących i makiet?
Dzięki!
Dzięki za wejście ... Ja aktualizowane na moje pytanie z trochę więcej szczegółów, ale co masz sugerowane naprawdę nie pomaga gdyż obejmować dodanie funkcjonalności specjalnie dla testy, które dla mnie wydają się bardziej "anty-wzorcem" - ale czy podkręcenie metod kontrolerów złamałoby tę zasadę? –
dodatkowa funkcjonalność? W jaki sposób użytkownik loguje się do Twojej witryny? Wspominasz proces rejestracji, ale nie logujesz się. Dlaczego nie możesz utworzyć fabryki dla już zarejestrowanego użytkownika i zalogować się tak, jak pokazałem ci powyżej? Historie dotyczące ogórków powinny dokładnie odzwierciedlać sposób interakcji użytkownika z witryną. Użytkownik nie może zablokować metod kontrolera. Mają formularze do wypełnienia i linki do kliknięcia. Nie jest to test akceptacji, jeśli nie naśladuje zachowania użytkownika. – danpickett
Widzę tu obie strony.Mam prawie dokładnie powyższe dla funkcji, która testuje uwierzytelnianie działa tak, jak chcę. W przypadku innych funkcji wydaje się, że trzeba powtarzać te kroki, aby zalogować się w każdym scenariuszu. Ogórek może manipulować stanem bazy danych dla celów testu, dlaczego nie sesja? –