niedziela, 26 stycznia 2014

Testy jednostkowe dla widoku

Jak się walniemy to do JSP możemy wrzucić zamiast obiektu klasy Użytkownik obiekt klasy typu na przykład Szpadel. Wywali się dopiero gdy aplikację uruchomimy - a nawet może być jeszcze gorzej i się nie wywali bo obydwa obiekty będą miał właściwość "${obiekt.name}" (na przykład szpadel "Władek" - przyjaciel każdego farmera)

No i trzeba przeczesać każdą taką stronkę seleniakami aby żaden babol nie wyciekł. Niby teraz jest moda by wszystko jechać javascriptem z API ale jeśli ktoś jeszcze staromodnie przekazuje model z kontrolera do widoku to poniższe może mu się przydać - ale to nie będzie JSP.

Testy widoku w Play2

Generalnie cała magia polega na tym, że w Play2 widok jest skompilowany do ogólnodostępnej funkcji a nie gdzieś tam ukrywany w targecie jak skompilowane JSPy. Szybko można ten temat ogarnąć tworząc podstawową aplikację (zakładając, że tam wszystkie scale są poinstalowane) :

  1. play new dotestow
  2. cd dotestow
  3. play
  4. eclipse
  5. ~run (ogonek jest po to aby kod był z automatu kompilowany)
I teraz w pliku index.scala.html wkleimy poniższy tekst
@(message: String)

<h1>@message</h1>

Wywołanie widoku

Odpalamy sobie konsolkę scali w Play (najpierw "play" potem "console") i można zrobić coś takiego :

Czyli elegancko wywołaliśmy sobie widok i mamy rezultat. Na razie go widzimy ale jeszcze nie testujemy.

Testy

Mamy z paczki wygenerowany test ApplicationSpec, który nawet przechodzi! Dorzućmy tam :

"generate proper header on the index page" in {
      //given
      val header="daj Kamienia"
      
      //when
      val result=views.html.index.apply(header)  
        
      //then
      result.toString must contain(s"<h1>$header</h1>")
    }

I teraz można to sobie odpalić z eclipse albo z konsoli jak kto woli :
Niniejszym jednostkowo przetestowaliśmy rezultat renderowania widoku- świat jest uratowany. Ano i szpadla tam nie można przekazać bo Play sprawdza typy.

Inne przydatne narzędzia

Play2 Framework to nie jedyne fascynujące narzędzie na jakie natrafiłem w ostatnim czasie. Poniżej zdjęcie nowoczesnego termosu turystycznego - jebany trzyma wrzątek przez bite 20 godzin.

*      *      *