2013-05-16 18 views
5

Chciałbym wiedzieć, co jest najlepszym sposobem, aby uruchomić specs2 testy na module PlayFramework i być w stanie symulować to działa.moduły Odtwórz Test & FakeApplication

Mój moduł zawiera niektóre trasy w pliku o nazwie mymodule.routes W moim apps ja je zintegrować dodając następującą linię w pliku moi trasy

-> /mymodule mymodule.Routes 

To jest test z moim modułem próbuję uruchomić ale zwraca błąd 404:

"test myroute" in { 
    running(FakeApplication()) { 
    await(WS.url("http://localhost:9000/mymodule/myroute").get).status must equalTo(OK) 
    } 
} 

Odpowiedz

4

FakeApplication naprawdę nie obiad proces internetowej, więc nie można przetestować za pomocą http dostęp do localhost.

Masz trzy opcje:

  • testowania kontrolera bezpośrednio
  • Testing router
  • Testowanie cała aplikacja.

Testowanie kontrolera odbywa się poprzez bezpośrednie wywołanie kontroler i sprawdzanie wyniku, jak zasugerowano w dokumentacji gry i zapewniając FakeRequest()

val result = controllers.Application.index("Bob")(FakeRequest()) 

Testowanie routerem odbywa się poprzez wywołanie routeAndCall z FakeRequest argument określający ścieżkę względną:

val Some(result) = routeAndCall(FakeRequest(GET, "/Bob")) 

Ostatecznie, jeśli chcesz przetestować całą aplikację, trzeba rozpocząć TestServer:

"run in a server" in { 
    running(TestServer(3333)) { 

    await(WS.url("http://localhost:3333").get).status must equalTo(OK) 

    } 
} 

Twoje pytanie brzmi: "Jaka jest najlepsza opcja?". Odpowiedź brzmi: nie ma niczego takiego jak najlepsza opcja, istnieją różne sposoby testowania dla różnych celów. Powinieneś wybrać strategię testowania, która lepiej pasuje do twoich wymagań. W tym przypadku, ponieważ chcesz przetestować router, sugeruję, abyś spróbował podejść n.2

+0

dzięki, że to ma sens, jednak nie wiem, co zrobić dla tras, ponieważ wracają 404, chyba że są zaimplementowane przez aplikacja nadrzędna. Próbowałem dodać podstawowy plik trasy w module tylko do testu, ale nie działa, chyba że usunę mymodule.routes – Roch

+0

Jak je testujesz? – Edmondo1984

+0

nazywając ich url używając API playframework WS – Roch