Problem następujący: jako początkujący w railsach 3 (ruby 1.9.2), chciałem trochę pomacać ActiveRecord i wszystkie jego elementy i chciałem to zrobić przy użyciu testów (Test::Unit), takie TDD na rozpoznanie terenu. Trochę szczerze mówiąc się zniechęciłem widząc jak rake test trwa 10 sekund, przy czym mam 3 testy, które są puste. Da się cos z tym zrobić? To samo w RubyMine - odpalenie pustych testów trwa ok 10 sek. Jak tu działać z TDD jeśli najprostsze testy odpalają się tyle czasu? Jak sobie z tym radzicie? I jeszcze jedno, czy pisząc test-first zawsze odpalacie rake test i wszystkie testy? Czy jakaś wajha do odpalania jednego testu? Jak to jest w RubyMine?
Zmień platformę z Windows na MacOS X albo Linux i ewentualnie kup lepszy kmputer :). Ale musisz pamiętać że to nigdy nie będzie 1s, a to z tego względu że przed testami startują Railsy – i tego nie pominiesz. Będzie to 4-6 sekund tak czy siak zanim co kolwiek się odpali, nawet na dobrym sprzęcie.
No albo do robienia testów mieć zewnętrzy sewer ;] No ale to rozwiązanie dla większych firm. Od biedy możesz zrobić sobie vserwer i na nim niezależnie robić testy, nie blokując sobie pracy.
Oddzielny serwer przy TDD? Jakoś tego nie widzę Kurde myślałem, że jakoś fajniej to wygląda
EDIT:
tak przy okazji, w takiej sytuacji piszecie w ogóle “test-first”? Nie wk… was czas odpalania testów do każdej zmiany? Czy to TDD w Rails jest takie śliczne tylko w teorii, a w praktyce stosowanie tego wiąże się z ciągłym oczekiwaniem na wyniki testów. Przy szybkich iteracjach TDD, śmiem twierdzić że może się okazać, że czas spędzony na zainicjalozowanie (nie odpalanie) testów jest większy niż spędzony nad pisaniem kodu. Smutne trochę.
Gdy już aplikacja rozrośnie się, to te 5-10s na start railsów to i tak będzie ułamek czasu poświęcony na wykonanie wszystkich testów. Ale fakt, przy testowaniu pojedynczej klasy to irytuje. Wypróbuj gema spork: http://rubyonrails.pl/forum/p24947-2011-02-23-12:40:31#p24947 . Poza tym w Ruby 1.9.3 jest nadzieja, że czas ładowania Railsów będzie znacząco krótszy.
Hubert dobrze prawi, Windows sobie nie radzi kiedy środowisko musi załadować miliard plików – a tak to już jest z test suite’ami w Ruby.
Jeśli to co tweetował Aaron a’propos przyspieszenia testów z okazji leniwego śmieciarza okaże się prawdą (pewnie dziś w nocy wreszcie siądę i odświeżę rvma), to będzie moja nowa ulubiona wersja rubiego
(zaraz po rubiniusie oczywiście)
[quote=tomekkos]Oddzielny serwer przy TDD? Jakoś tego nie widzę Kurde myślałem, że jakoś fajniej to wygląda
EDIT:
tak przy okazji, w takiej sytuacji piszecie w ogóle “test-first”? Nie wk… was czas odpalania testów do każdej zmiany? Czy to TDD w Rails jest takie śliczne tylko w teorii, a w praktyce stosowanie tego wiąże się z ciągłym oczekiwaniem na wyniki testów. Przy szybkich iteracjach TDD, śmiem twierdzić że może się okazać, że czas spędzony na zainicjalozowanie (nie odpalanie) testów jest większy niż spędzony nad pisaniem kodu. Smutne trochę.[/quote]
Tak jak chłopaiki piszą, pobaw się Sporkiem. Z drugiej strony każda wymówka jest dobra, żeby testów nie pisać, więc może swoją znalazłeś właśnie ;). Ciekaw jestem do czego się odnosisz mówiąc że “TDD w Rails jest takie śliczne tylko w teorii”? Java? .NET? Gdzie to jest lepiej zrobione?
@hubert, nie nie to nie szukanie wymówek do niepisania testów, bo właśnie o to mi chodzi żeby je pisać, Z resztą skoro nawet zwykłe “macanie” technologii nie powiązane z żadnym konkretnym projektem chcę robić w oparciu o testy, to jeszcze nie jest ze mną tak źle żeby się migać.
Wywodzę się z Javy a dokładniej z JEE (Eclipse, JUnit itd). Tam działa to naprawdę szybko, zakładając, że nie potrzebujesz startować kontenerów JPA, EJB itp, a dużą część da się w ten sposób wytestować, dlatego trochę mnie zmartwiła szybkość przygotowywania testów w Railsach. Ze startowaniem bazy in-memory i wspomnianych kontenerów już robi się długawo. Fakt, w railsach częściowo to jest usprawiedliwione - w końcu wstają całe railsy. Ale przyzwyczajam się powoli - da się jakoś przeżyć, ale skoro mówicie o Rb 1.9.3 to czekam z niecierpliwością. A Sporka wypróbuję.
Btw, pytanie do was, jako że znacie temat zdecydowanie lepiej; zastanawiam się czy jest jakiś sposób (zakłądając że testuję modele , czyli potrzebuję tylko funkcjonalności ActiveRecord itp) żeby jakoś odchudzić środowisko?
Tomekkos, zacznij naprawdę od zmiany systemu. Pod *nixem środowisko (w zależności od interpretera i rozmiaru aplikacji) ładuje się w kilka sekund i od razu lecą testy.