2017-10-23 2 views
1

Ich habe eine folgende Funktion, die Einheit getestet werden. Aber ich weiß nicht, wie ich es genau testen soll. Ist es auch notwendig diese Funktionen zu testen? Ich benutze Grails 2.5.1 und spock 0.7. Bitte schlagen Sie vor.Grails spock Einheit Test für Redirect und render

def allGeneralNotes() { 
    def ben = Beneficiary.findById(params.id) 
    if(!ben){ 
     redirect(controller: 'dashboard',action: 'index') 
    } 

    def generalNotes = Note.findAllByBeneficiaryAndTypeAndIsDeleted(Beneficiary.findById(params.id), NoteType.GENERAL,false).sort { it.dateCreated }.reverse() 
    def userNames = noteService.getUserName(generalNotes); 
    render view: 'generalNotes', model: [id: params.id, generalNotes: generalNotes, userNames:userNames] 
} 
+1

Dies ist nicht auf Tests verwendet, aber Ihre Controller-Aktion wird ein Problem sein, weil Sie nicht nach dem Aufruf von 'redirect' kehren so zu' render' auf den Aufruf fließen, nachdem die Steuerung geht Aufruf 'Umleiten'. Sie sollten entweder nach 'redirect' zurückkommen oder Ihre' if {...} 'Logik reorganisieren, so dass sich alles unter dem' redirect' in einem 'else' Block befindet. –

Antwort

1

Ich musste die Namen für eine Reihe von Facetten annehmen, aber hoffentlich bringt dich das Folgende in die richtige Richtung. Eine Sache zu beachten ist, dass Sie Beneficiary.findById(params.id) zweimal in Ihrer Controller-Methode aufrufen, können Sie einfach ben in findAllByBeneficiaryAndTypeAndIsDeleted übergeben.

Möglicherweise müssen Sie auch die neuen Objekte, die von den gespotteten Methoden zurückgegeben werden, zusätzlich mit Parametern versehen.

@TestFor(BeneficiaryController) 
@Mock([ Beneficiary, Note ]) 
class BeneficiaryControllerSpec extends Specification { 

    def noteService = Mock(NoteService) 

    void setup() { 
     controller.noteService = noteService 
    } 

    void "test allGeneralNotes no beneficiary"() { 
     when: 
      controller.allGeneralNotes() 
     then: 
      response.redirectedUrl == '/dashboard/index' 
    } 

    void "test allGeneralNotes beneficiary found"() { 
     given: 
      Beneficiary.metaClass.static.findById{ a -> new Beneficiary()} 
      Note.findAllByBeneficiaryAndTypeAndIsDeleted = { a, b -> [new Note(dateCreated: new Date()), new Note(dateCreated: new Date())]} 
     when: 
      controller.allGeneralNotes() 
     then: 
      1 * noteService.getUserName(_) >> 'whatever username is' 
      view == '/generalNotes' 
    } 
} 
+0

Vielen Dank für Ihre Mühe, es half mir, genau zu sortieren, was ich suchte. :) – BenHuman

Verwandte Themen