2011-06-17 11 views
6

Jako długoletni php dev i rails newb starałem się zrozumieć na tdd/bdd. Jest tak wiele narzędzi i metodologii, że może to być dość zniechęcającym zadaniem. Po wielu lekturze doszedłem do wniosku, że jest to moja preferowana metoda testowania:Poszukuję przykładów Rails 3 testów integracyjnych/akceptacyjnych z RSpec

  • Bez ogórka, wydaje mi się, że to tylko niepotrzebna złożoność.
  • RSpec do testów jednostkowych
  • RSpec/Capybara do testów integracji/akceptacji.
  • Brak testów dla kontrolerów/widoków.
  • Fabryka Girl lub Machinist dla fabryk.
  • Nie kpij z mojego własnego kodu.

Będąc całkowitym dyskiem BDD, może to być nietypowe, dlatego warto zaproponować sugestie dotyczące tego stosu testów.

To, czego naprawdę szukam, to projekt open source wykorzystujący te narzędzia, które mogę szukać inspiracji.

Tutorials również byłby doceniany, ale myślę, że oglądanie projektu realnego świata realizującego wszystkie te pomysły byłoby bardzo pomocne.

Odpowiedz

10

Wydaje się, że każdy ma swój własny przepis na testy, które sprawdzają się w ich przypadku. Moje doświadczenie jest podobne do twojego - długoletni programista PHP nie używający żadnych testów (ale wykonujący wiele ręcznych testów w trybie white-box podczas tworzenia). Niedawno zacząłem pisać moją pierwszą aplikację na poziomie produkcyjnym, z aplikacją Raid-for-playing-with-Rails. Oto moje przemyślenia po pierwszych trzech miesiącach.

Ja także uznałem Ogórek za zbyt skomplikowany, abym mógł zacząć. Walczyłem z tym zbyt długo, zanim w końcu uświadomiłem sobie, że jestem zbyt daleko od rzeczywistych ram badawczych. Kiedy spadłem do czystego RSPec, sprawy stały się znacznie jaśniejsze. To powiedziawszy, teraz, gdy napisałem swoją pierwszą aplikację z solidnym zestawem testowym, myślę, że prawdopodobnie mógłbym upuścić Cucumbera w mojej następnej recepturze aplikacji Rails i czuć się bardziej komfortowo, używając go do testowania integracji, jednocześnie nadal używając RSpec do testowania jednostkowego.

Rozwinąłem niezdrowe zauroczenie RSpecem, kiedy w końcu zrozumiałem proces. Naprawdę piękne jest prowadzenie tych testów i zobaczenie wszystkiego na zielono. W rzeczywistości satysfakcjonujące jest czerwone, ponieważ mówi mi, nad czym pracować dalej.

Używam domyślnego Webrat do testów integracyjnych. Nie natknąłem się na nic, czego Webrat nie byłby w stanie rozwiązać, ale nie wypróbowałem też Capybary, więc może po prostu nie wiem, jak źle to mam.

Zacząłem pisać swoje testy, podążając za Poradnikiem Railsów, w których autor mówi: "Ponieważ nie jestem stronniczy w oddzielnych testach dla widoków lub pomocników, które uważam za kruche lub zbędne naszym pierwszym krokiem jest ich usunięcie. " (Strona 93, paragraf 2) Po napisaniu paczki metod pomocniczych postanowiłem wrócić i napisać osobne testy pomocnicze dla wszystkich z nich. Nadal rozwijam testy przeglądania w testach kontrolerów, ale mogłem zobaczyć, jak je oddzielić w następnym projekcie. FWIW, myślę, że naprawdę powinieneś pisać testy na wszystko na pewnym poziomie, nawet jeśli polegasz tylko na testach kontrolerów, aby ćwiczyć swoje poglądy i/lub twoje testy widzenia, aby ćwiczyć swoje metody pomocnicze.

Używam Factory Girl z tym projektem i stwierdziłem, że jest bardzo przydatny i łatwy w użyciu. Nie próbowałem Machinist, ale wydaje się równie popularny.Jedno, o czym powiem, to to, że kiedy po raz pierwszy zacząłem pisać moje fabryki, użyłem klejnotu FFaker do generowania losowej zawartości do każdego stworzonego przeze mnie obiektu fabrycznego. Z początku wydawało mi się to miłe, ponieważ zmienna zawartość czasami powodowała, że ​​znajdowałem rzeczy, które przeoczyłem w rozwoju (nie mogę w tej chwili myśleć o dobrym przykładzie), ale oznaczało to również, że musiałem się martwić o obcięcie wszystkich zwróciło dane FFakera, aby pasowały do ​​ograniczeń długości w modelu. Na dłuższą metę okazało się to zbyt nieporęczne, więc usunąłem cały ten kod i użyłem ciągów statycznych dla wszystkich moich fabryk i tylko dla wymaganych pól. Potem, kiedy chciałem wykonać określone pole, zrobiłbym to w mojej faktycznej specyfikacji. IMO, twoje fabryki powinny zawierać tylko tyle danych, aby stworzyć prawidłowy obiekt i nic więcej.

Co do szyderstwa, znalazłem tylko kilka miejsc, w których musiałem kpić z czegoś, ale być może jestem zbyt nowy, aby Rspec wiedział, że robię to źle.

Na koniec, tak jak w przypadku konkretnych przykładów, wystarczy spojrzeć na GitHub, na przykład aplikacje Rails lub projekty Rails open source, które zawierają testy. Lub, podobnie jak ja, wykonaj razem z Tutorial Book Rails. Niezależnie od tego, co zdecydujesz się zrobić, zacznij jak najbliżej metalu, a następnie spróbuj różnych klejnotów/wtyczek/etc, zawsze upewniając się, że możesz wycofać swoje zmiany, jeśli zdecydujesz, że wyniki ci się nie podobają. Odkryłem, że próba rozpoczęcia od kompletnego przepisu (np. Szelki, światło niebieskie-specjalne itp.) Była zbyt przytłaczająca. Rozpoczynając od surowej aplikacji Railsa, mogłem wypróbować różne rozwiązania (spinacz do papieru w porównaniu z noskiem nośnym, typus versus rails_admin, odprawa w porównaniu z devise, itp.), Aby sprawdzić, które z nich działają zgodnie z osobistymi preferencjami. Jest oczywiste, że nie ma jednego doskonałego przepisu na aplikację Rails, a każdy preferowany przepis to tylko opinia.