2014-10-14 15 views
5

Ich benutze Rails + AngularJS und habe für alle meine End-to-End-Tests den Winkelmesser verwendet. Ich habe es mit der protractor-rails gem eingerichtet, die mir hilft, die Testdatenbank anstelle der Entwicklungsdatenbank für meine Tests zu verwenden.Aufräumen nach dem Winkelmesser-Test

Das Problem ist, nachdem ich einen Test zB: 'create_client_spec.js.coffee' ausgeführt habe, dann bin ich mit einem neuen Client in meiner Tabelle, die nach meinem Test nicht aufgeräumt ist.

helper = require('../../helper.js.coffee') 

describe('create a new client', -> 

    beforeEach -> 
    helper.login() 

    afterEach -> 
    helper.logout() 

    it 'shows the client after creation', -> 
    browser.get('/api#/clients') 
    element(By.id("new_btn")).click() 

    element(By.id("name")).sendKeys("John Smith") 
    element(By.id("create_btn")).click() 

    expect(element(By.id("heading")).getText()).toContain("John Smith") 

) 

Wie säubere ich diese Tests gut?

Eine Idee, die ich hatte, war eine Methode in afterEach hinzuzufügen, um den neuen Client nach jedem Test in dieser Datei zu entfernen.

Update:

ich folgendes in meinem helper.js.coffee gesetzt haben

delete_client: -> 
    last=element.all(By.id("listing")).last() 
    last.element(By.id("delete")).click() 
    this.accept_dialog() 

    accept_dialog: -> 
    # Accept the dialog which is displayed 
    ptor = protractor.getInstance() 
    alertDialog = ptor.switchTo().alert() 
    alertDialog.accept() 

Dann rufe ich die helper.delete_client() in meinem afterEach Block vor sich abzumelden. Es funktioniert, aber gibt es einen besseren Weg?

+0

Kennen Sie die optionale Option 'onCleanUp' in [Winkelmesserkonfiguration] (https://github.com/angular/protractor/blob/master/docs/referenceConf.js#L195)? – glepretre

+0

Nein, ich wusste nichts über diese Option onCleanUp, könnte ich eine Rake-Aufgabe in onCleanUp aufrufen? – map7

+0

Ich bin mir nicht sicher, es wird automatisch am Ende all Ihrer Tests aufgerufen, das ist alles was ich weiß. – glepretre

Antwort

1

Wie säubere ich diese Tests gut?

Scheint, wie Ihre Definition von cleanup ist, dass Sie über das heißt beginnen mit mit frischem listing Elemente beginnen und die nicht-Dialog geöffnet ist. Da du delete das letzte Element hast, beginnt jeder Test mit leerer Auflistung.

d. H. Sie möchten von vorne beginnen.

Der folgende Hack kann helfen und sicherstellen, dass sie sehr sauber sind, aber möglicherweise Ihre Tests verlangsamen.

browser.get('<your root URL>'); 

Wenn diese „zu viel Reinigung“ für Sie ist dann afterEach Option ist eigentlich nicht schlecht, aber Sie am Ende Testen ‚Löschen‘ Use Case wie Sie codiert haben.

//note I have not run this snipped this so it is not syntax free 
listing=element.all(By.id("listing")) 
listing.innerHTML = '';//or whatever should be the default 
OR 
listing.removeChild(listing.last()); 

Über den geöffneten Dialog.

Es scheint seltsam, dass element(By.id("create_btn")).click() den Dialog nicht schließt, aber was weiß ich über den Anwendungsfall.

Um den Dialog zu entfernen, können Sie ähnliche DOM-Manipulationstechniken verwenden und nur dieses DOM entfernen, ansonsten wird auch der andere Anwendungsfall getestet.

+1

Mit Cleanup meine ich wieder mit meinen gesetzten Daten anzufangen und nicht mit den neuen Elementen, die ich eingegeben habe. Es wäre gut, schnell zu einer Momentaufnahme der Datenbank zurückzukehren. – map7

+1

Bei SPAs ist die Architektur REST und das Back-End behält den Status aufgrund der Verwendung der Datenbank bei. Es bewegt sich in einen neuen Zustand. Das ist also die Backend-Problemdomäne. Wenn möglich, sollten Sie vermeiden, sich auf den Backend-Status verlassen zu müssen. All diese Probleme werden problematisch, wenn wir uns darauf konzentrieren, den "UI" -Code zu testen, anstatt aus dem Backend zu kommen.Anstatt zu testen/zu verifizieren "Ich muss 5 Einträge auf der Seite haben" möchten Sie vielleicht prüfen/verifizieren, dass "mehrere Einträge auf der Seite angezeigt werden". Dies entfernt den Datenbank/Backend-Test, der ein separater Bereich zum Testen von REST-Diensten ist. – bhantol