W świecie ruby TDD jest ułatwiony dzięki narzędziom wbudowanym w framework. Factory Girl, Mocha, rSpec i inne pozwalają programistom tworzyć łatwe i dynamiczne testy uwzględniające potrzebne przypadki testowe.
Sfrustrował mnie również brak narzędzi TDD w Drupal. Moim największym problemem z nimi jest czas potrzebny na przeprowadzenie pojedynczego testu. Cykli programowania nie można spowolnić przez pojedyncze testy trwające 60–90 sekund po każdej iteracji. Pełne pakiety testowe działałyby w wielogodzinnym przedziale czasowym, jeśli w ogóle zawracasz sobie głowę pisaniem testów.
Podejrzewam, że ma to związek z kopiowaniem pełnej bazy danych za każdym razem, gdy uruchamiany jest test, ale prawdopodobnie nie zmieni się to w najbliższej przyszłości z tego, co mogę powiedzieć, szczególnie jeśli potrzebujesz do tego DrupalWebTestCase.
Hakuję razem rozwiązanie przy użyciu Phactory i phpunit, które ręcznie ładują Drupala. Oczywiście napotkaliśmy pewne problemy i jeszcze tego nie ukończyłem, ale się to udaje.
Na szczęście większość mojej pracy dotyczy warstwy wewnętrznej, więc mogę pozostać na poziomie DRUPAL_BOOTSTRAP_DATABASE. Ale wpadam na więcej sytuacji, w których będę potrzebować pełnego stosu.
Ostatecznie TDD w Drupal nie jest dobrze obsługiwane, więc możesz napisać własny, aby działał poza ramą testową drupal lub znieść słabą wydajność.
-- AKTUALIZACJA --
Z powodzeniem skonfigurowałem pełną integrację Drupala z Phactory i teraz przeprowadzam testy za pomocą phpunit zamiast testowej witryny Drupal. To jest możliwe.
Mam nadzieję, że dojdę do punktu, w którym mogę go wydać i można go włączyć do dokumentu Phactory.
- AKTUALIZACJA 2 -
Dokument na temat konfiguracji Phactory znajduje się na stronie https://github.com/trimbletodd/phactory .
Ponieważ blog Marka jest offline, wspomnę o niektórych narzędziach, które jego zespół wdrożył:
Testy funkcjonalne: Selenium
Testy jednostkowe: Najprostszy
serwer kompilacji: Jenkins
Test porównawczy wydajności: XDebug + Cachegrind
W ciągu dwóch lat, odkąd zadałem to pytanie, zauważyłem, że niektóre dodatkowe narzędzia zyskują popularność na scenie TDD. W dzisiejszych czasach, gdy mówimy o Test Driven Development (oczywiście w kontekście Drupala), istnieją dwie strony tej samej monety - testy front-end i testy back-end.
Oto dwie prezentacje, które wyróżniają się z najnowszego Drupalcon Portland 2013 reprezentujące tę kwestię:
Rozwój, Według liczb , testowanie zaplecza.
Zautomatyzowane testowanie z Jasmine i PhantomJS , testy frontendowe.
Pierwsza prezentacja nie jest związana z testowaniem jednostkowym ani funkcjonalnym (ściśle mówiąc), chodzi raczej o narzędzia do pomiaru jakości kodu. Niemniej jednak wydaje mi się, że jest to trochę związane z tym tematem.
źródło
Jedyną rzeczą, o której wiem, jest to, że w przypadku wniesionych modułów możesz włączyć automatyczne testowanie zatwierdzeń i poprawek w kolejce problemów, patrz http://drupal.org/node/689990 . Nadal jest nieco niestabilny, szczególnie jeśli masz zależności.
Większość projektów prawdopodobnie robi coś więcej zgodnie z rozwojem opartym na błędach, co w zasadzie sprowadza się do napisania testu, kiedy błąd został znaleziony, a następnie naprawiony. Jeśli w ogóle ;)
Z mojego osobistego doświadczenia, TDD jest dość trudne w Drupal, ponieważ często nie piszesz (tylko) testów jednostkowych w Simpletest, ale testów integracyjnych, w których przeglądasz strony i przesyłasz formularze. Trudno więc wcześniej napisać dobre testy. Ale może po prostu nie jestem przyzwyczajony do tego :)
źródło