2016-03-21 7 views
1

Ich möchte eine einfache CRUD-Löschung mit Geb, Grails und RemoteControl testen.Grails und Geb: Reproduzierbarer Löschtest

Hier meinen vereinfachte Code:

test "Delete a book"() { 
    when: 
    to BookShowPage // book/show/1 
    deleteLink.click(BookListPage) 

    then: 
    // ... 

    cleanup: 
    def remote = new RemoteControl() 
    remote { 
     new Book(title:'title').save(failOnError: true, flush: true) 
     return true 
    } 
} 

Aber wie kann ich meinen Test reproduzierbar zu machen?

Wenn ich meinen Test wiederhole, hat das neue Buch eine andere ID und der Test schlägt fehl.

+0

tun Sie Ihr Buch-Setup in einem bestimmten: Block und rufen Sie die ID des Buches, machen die 'BookShowPage' die ID des Buches in den angegebenen Block aufgenommen (ich gehe davon aus, dass Sie dies tun können, nicht wagte ich mich noch selbst), und Sie sollten replizierbar sein? – railsdog

+0

Es ist ein guter Weg. Ich muss nur entdecken, heiß zu ID an die GEB-Seite zu übergeben ... Vielen Dank. –

Antwort

1

Nach dem Kommentar von railsdog habe ich das Erstellen eines neuen Buches in dem gegebenen Block gelöst.

Hier ist der richtige Code:

test "Delete a book"() { 
    given: 
    def remote = new RemoteControl() 
    def bookId = remote { 
     Book book = new Book(title:'title').save(failOnError: true) 
     return book.id 
    } 

    when: 
    to BookShowPage, bookId // (*) 
    deleteLink.click(BookListPage) 

    then: 
    // ... 

    cleanup: 
    remote { 
     Book book = Book.get(bookId) 
     if (book) { 
      // Test fails and we have junk into the db... 
      book.delete(failOnError: true) 
     } 
     return true 
    } 
} 

(*) Siehe how to customize Geb page URL.