2013-04-21 15 views
6

chciałem przetestować jeden z moich metod POST w moim kontrolera, więc napisałem coś takiego:play Framework - metoda kontroler testy POST

@Test 
    public void shouldSaveNewCollectionToDatabase(){ 
     String body = "{\"name\":\"collectionName\", \"owner\": {}}"; 
     JsonNode json = Json.parse(body); 
     FakeRequest request = new FakeRequest(POST, "/rest/collections/add").withJsonBody(json); 

     Result result = callAction(controllers.routes.ref.SetsAndCollections.postCollection(), request); 
     verify(questionSetCollectionDAO).save(any(QuestionSetCollection.class)); 
    } 

rzeczą jest, ten test nie powiedzie się, ponieważ metoda kontroler nie jest wywoływany w ogóle więc moje metody questionSetCollectionDAO nie są wywoływane.

ja zdarzenie umieścić jakiś druk na górze metody:

@BodyParser.Of(Json.class) 
@play.db.jpa.Transactional 
public static Result postCollection(){ 
    System.out.println("I am here"); 
... 

i nie widzę żadnego wyjścia na konsoli.

Jeśli nie jest to sposób, w jaki można wywołać metody kontrolera z fałszywymi żądaniami, jak mogę to zrobić?

Przeczytałem o fakeApplication, ale czy istnieje inny sposób na proste sprawdzanie metod kontrolera POST?

+1

Czy kiedykolwiek to wymyśliłeś lub znalazłeś coś jeszcze? – Meredith

Odpowiedz

0

Czy możesz wydrukować kod statusu http swoich wyników? Jeśli jest to przekierowanie 303 - które brzmi, jakby było (ponieważ kontroler nie jest wywoływany), najprawdopodobniej musisz podać plik cookie sesji odtwarzania logowania, aby wykonać metodę POST.

Zobacz tę odpowiedź, w jaki sposób uzyskać plik cookie uwierzytelniania w Play 2: https://stackoverflow.com/a/13953375/286550

2

Do testowania usługi REST, przede wszystkim należy zacząć fałszywą aplikację.

FakeApplication fakeApplication=fakeApplication(); 
start(fakeApplication); 

I na koniec pf test jest Poleciłem go zatrzymać

stop(fakeApplication); 

Jeśli masz wiele metod testowych można dodać te metody w klasie testowej w celu ułatwienia procesu testowego.

FakeApplication fakeApplication = fakeApplication(); 

@Before 
public void beforeTest() { 
    start(fakeApplication); 
} 

@After 
public void afterTest() { 
    stop(fakeApplication); 
}