Aby znaleźć odpowiednią grupę dla kontrolerów, pomyśl o testowaniu .
(Nawet jeśli tak naprawdę nie przeprowadzasz żadnych testów, myślenie o tym, jak przejść do testowania kontrolerów, da ci bardzo dobre informacje na temat ich strukturyzacji).
AuthenticationController
Nie jest sprawdzalne przez siebie, ponieważ zawiera tylko funkcjonalność do logowania i wylogowania, ale Twój kod badania będą musiały jakoś tworzyć fałszywe rachunki do celów testowych, zanim będzie można go przetestować udanego logowania. Możesz ominąć testowany podsystem i przejść bezpośrednio do swojego modelu w celu utworzenia kont testowych, ale wtedy będziesz miał delikatny test w swoich rękach: jeśli model się zmieni, będziesz musiał zmodyfikować nie tylko kod, który testuje model, ale także kod testujący kontroler, mimo że interfejs i zachowanie kontrolera pozostały niezmienione. To nieracjonalne.
A LoginController
jest nieodpowiedni z tych samych powodów: nie można go przetestować bez uprzedniego utworzenia konta, a jest jeszcze więcej rzeczy, których nie można przetestować, na przykład zapobieganie duplikowaniu loginów, a następnie umożliwienie użytkownikowi zalogowania się po wylogowaniu. (Ponieważ ten kontroler nie ma funkcji wylogowania).
AccountController
Daje wszystko, czego potrzeba, aby zrobić swoje badania: można utworzyć konta testowego, a następnie spróbuj logowania, można usunąć konto, a następnie upewnij się, że nie może już login, można zmienić hasło i upewnij się, że należy użyć właściwego hasła do logowania itp.
Podsumowując: aby napisać nawet najmniejszy pakiet testowy, musisz udostępnić mu całą funkcjonalność AccountController
. Dzielenie go na mniejsze kontrolery wydaje się dawać niesprawne kontrolery o niewystarczającej funkcjonalności do prawidłowego testu. Jest to bardzo dobra wskazówka, że funkcjonalność AccountController
jest najmniejszym poddziałem, który ma sens.
Mówiąc ogólnie, podejście „pomyśl o testowaniu” będzie działać nie tylko w tym konkretnym scenariuszu, ale w każdym podobnym scenariuszu, z którym się spotkasz w przyszłości.