2013-12-13 12 views
9

Prima di tutto, il codice seguente sembra funzionare. Tuttavia, non ho ancora visto nessuno fare questo, quindi mi chiedo se questo sia addirittura legittimo e se mi mancano aspetti negativi imprevisti.Il gelsomino Gelsomino descrive blocchi annidati all'interno di un blocco

Il contesto è che sto scrivendo un test E2E con Protractor che utilizza blocchi descrittivi stile Jasmine. Il mio obiettivo è caricare una pagina ed eseguire un gruppo di blocchi di test it senza ricaricare quella pagina ogni volta (perché richiede molto tempo).

Il costrutto che ho è:

describe("Homepage", function() { 

    beforeEach(function() { 
     browser.get("/"); //loads the page 
    }); 

    it('elements', function() { 
     describe('test group', function() { 
      it('test 1', function() { 
       //run stuff 1 
      }); 

      it('test2', function() { 
       //run stuff 2 
      }); 
     }) 
    }); 
}); 

Mi rendo conto che un'alternativa è solo quello di fare questo:

describe("Homepage", function() { 

    beforeEach(function() { 
     browser.get("/"); //goes to homepage 
    }); 

    it('elements', function() { 
     //run stuff 1 
     //run stuff 2 

    }); 
}); 

Ma il problema è che non riesco a separare i test e si finisce con un grande blocco it. Voglio in qualche modo evitare il problema di eseguire prima ogni singola volta, ma sono ancora in grado di avere un blocco test ben separato.


A proposito, ho anche provato questo:

describe("Homepage", function() { 

    browser.get("/"); //goes to homepage 

    it('elements', function() { 
     //run stuff 1 
     //run stuff 2 

    }); 
}); 

ma questa non funziona quando si dispone di più specifiche come questo. Il browser.get() viene eseguito uno dopo l'altro prima dell'esecuzione dei test.

risposta

7

Rompere le asserzioni in blocchi più piccoli è sicuramente una buona idea. Jasmine non ha una funzione di impostazione globale che viene eseguita una sola volta. Così forse si può ingannare il blocco beforeeach in solo in esecuzione il programma di installazione una volta:

describe("Homepage", function() { 
    var pageLoaded = false; 

    beforeEach(function() { 
     if (! pageLoaded) { 
      browser.get("/"); 
      pageLoaded = true; 
     } 
    }); 
}); 
+0

Questa è una buona idea. Lasciami aspettare un giorno o due prima di accettare di vedere se qualcun altro ha qualche idea. – wlingke

+0

Desidero aggiungere anche per questo specifico scenario di 'browser.get()' puoi anche controllare la pagina attiva con 'browser.getCurrentUrl()' e controllare la pagina corrente prima di "recuperarla". – wlingke

3

Jasmine2 ha beforeAll() e dopo All(), che viene eseguito una volta per l'intera suite.