2014-10-14 3 views
5

Uso Rails + AngularJS e sono passato all'utilizzo di Goniometro per tutti i miei test end-to-end. L'ho configurato usando lo protractor-rails gem che mi aiuta a usare il database di test invece del database di sviluppo per i miei test.pulizia dopo i test del goniometro

Il problema è dopo aver eseguito un test, ad esempio: 'create_client_spec.js.coffee', quindi mi rimane un nuovo client nella mia tabella che non viene pulito dopo il test.

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") 

) 

Come si puliscono questi test in modo corretto?

Un'idea che avevo era di aggiungere un metodo in afterEach per rimuovere il nuovo client dopo ogni test in questo file.

Aggiornamento:

ho messo il seguente nel mio helper.js.coffee

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() 

Poi io chiamo il helper.delete_client() nel mio blocco afterEach prima di uscire. Funziona, ma c'è un modo migliore?

+0

Conoscete la funzione opzionale 'onCleanUp' in [goniometro] (https://github.com/angular/protractor/blob/master/docs/referenceConf.js#L195)? – glepretre

+0

No Non sapevo di questa opzione onCleanUp, potevo chiamare un'attività rake in onCleanUp? – map7

+0

Non ne sono sicuro, viene automaticamente chiamato alla fine di tutti i test, è tutto quello che so. – glepretre

risposta

1

Come si puliscono bene questi test?

Sembra come la tua definizione di cleanup è che si ricominciare cioè iniziare con con fresco listing elemento e non finestra di dialogo è aperta. Dato che tu hai delete l'ultimo elemento, ogni tuo test inizia con un elenco vuoto.

, ovvero si desidera ricominciare da capo.

I seguenti hack possono aiutare e garantire che siano molto puliti ma possono rallentare i test.

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

Se questa è la "troppa pulizia" per voi allora la vostra opzione afterEach in realtà non è male però si finisce per testare il caso 'delete' uso il modo che avete codificato.

//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()); 

Informazioni sulla finestra di dialogo aperta.

Sembra strano che element(By.id("create_btn")).click() non chiuda la finestra di dialogo, ma che ne so del caso d'uso.

Per rimuovere la finestra di dialogo è possibile seguire tecniche di manipolazione DOM simili e rimuovere solo quel DOM altrimenti si finisce per testare anche l'altro caso d'uso.

+1

Per pulizia, intendo ricominciare da capo con i miei dati iniziali e non con i nuovi elementi inseriti. Sarebbe bene tornare rapidamente a un'istantanea del database nel tempo. – map7

+1

Con le SPA l'architettura è REST e il backend mantiene lo stato grazie all'uso del database. Si sposta in un nuovo stato. Quindi questo è il dominio del problema di backend. Quindi, se possibile, potresti voler evitare di dover fare affidamento sullo stato di back-end. Tutti questi problemi diventano punti contrari quando ci concentriamo sul test del codice "UI" anziché su quello che proviene dal back-end.Quindi, invece di testare/verificare "Devo avere 5 elenchi sulla pagina", potresti voler verificare/verificare che "più elenchi siano visualizzati sulla pagina". Questo elimina il test del database/back-end, che è un'area separata di test dei servizi REST. – bhantol