2010-05-17 20 views
6

Mam metodę kontrolera takie jak:Jednostka testująca metodę sterownika?

def search = { 
    def query = params.query 

      ... 

    render results as JSON 
} 

Jak przetestować tej jednostki? W szczególności, jak wywołać wyszukiwanie, aby ustawić params.query, i jak mogę przetestować wyniki metody render? Czy jest jakiś sposób na drwi z metody renderowania?

Odpowiedz

5

Podklasa grails.test.ControllerUnitTestCase do testów jednostkowych. Grails automatycznie tworzy instancję kontrolera i wyśmiewa wersje renderowania i przekierowania, które pozwalają łatwo przetestować wyniki. Wystarczy przypisać wejścia testowe do kontrolera.params, aby ustawić test.

Przykład:

class SomethingController { 
    def search = { 
     def query = params.query 
     ...stuff... 
     render results as JSON 
    } 
} 

Test wygląda następująco:

class SomethingControllerTests extends grails.test.ControllerUnitTestCase { 
    void testSearch() { 
     controller.params.query = "test query" 
     controller.search() 
     assertEquals "expected result", controller.response.contentAsString 
    } 
} 

Uwaga: Można użyć ControllerUnitTestCase do testów integracyjnych też, jeśli potrzebujesz pełnej integracji środowiska wraz z bazą danych.

0

Istnieją dwa sposoby na przetestowanie sterownika, ale będzie to wymagało pewnych zmian.

Pierwszą z nich jest przetestowanie samego kontrolera, bez dodawania złożoności analizy składniowej protokołu http, więc należy napisać test jednostki i przekazać w parametrze params.query jako część testu jednostki, a więc podzielić funkcję wyszukiwania na dwie funkcje:

def search = { 
    def query = params.query 
    render realSearch(query) as JSON 
} 

def realSearch ... 

Pierwsza część testuje więc realSearch.

Następnie drugą częścią jest napisanie aplikacji, która faktycznie łączy się z aplikacją internetową i wykonanie testu funkcjonalnego, który przetestuje całą aplikację, w tym części kontrolera, którego nie przetestowano w pierwszej części .

0

TFM: Grails ref chapter 9

Wykonaj testCreateWithJSON() przykład ... po prostu wepchnąć swój ciąg kwerendy w params [ 'zapytanie'], ustaw contentType, wyszukiwania call(). Ponieważ jawnie wywołujesz render, najprościej byłoby spojrzeć na response.contentAsString ... Prawdopodobnie po prostu utworzę wzorzec dopasowania w odniesieniu do contentAsString; możesz ponownie przeanalizować go jako JSON, a następnie zbadać to drzewo obiektów, ale podejrzewam, że nie będzie tak jasne/szybkie jak proste twierdzenia o dopasowywaniu wzorców.

Powiązane problemy