2013-12-13 9 views
9

Po pierwsze, poniższy kod działa. Jednak nie widziałem jeszcze nikogo, kto to robi, więc zastanawiam się, czy jest to uzasadnione i czy brakuje mi nieprzewidzianych wad.Kątomierz Jasmine opisuje bloki zagnieżdżone w tym bloku

Kontekst polega na tym, że piszę test E2E z Kątomierzem, który wykorzystuje bloki opisujące styl jaśminowy. Moim celem jest załadowanie strony i uruchomienie kilku bloków testowych it bez ponownego ładowania tej strony za każdym razem (ponieważ jest to czasochłonne).

Konstrukt mam to:

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 
      }); 
     }) 
    }); 
}); 

Zdaję sobie sprawę, alternatywą jest tylko, aby to zrobić:

describe("Homepage", function() { 

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

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

    }); 
}); 

Ale problemem jest to, że nie można oddzielić testy i skończyć z dużym blokiem it. Chcę jakoś uniknąć problemu z uruchomieniem przed każdym dowolnym razem, ale nadal być w stanie mieć ładnie oddzielone bloki testowe zestawu.


Nawiasem mówiąc, próbowałem to również:

describe("Homepage", function() { 

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

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

    }); 
}); 

oprócz tego nie działa, gdy masz wiele specyfikacje jak ten. Wszystkie przeglądarki browser.get() są uruchamiane jedna po drugiej, zanim testy zostaną uruchomione.

Odpowiedz

7

Przełamywanie asercji na mniejsze bloki jest zdecydowanie dobrym pomysłem. Jasmine nie ma funkcji globalnej konfiguracji, która działa tylko raz. Więc może można oszukać blok beforeEach się tylko raz uruchomiony konfigurację:

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

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

To jest dobry pomysł. Pozwól mi poczekać dzień lub dwa przed zaakceptowaniem, czy ktokolwiek ma jakieś pomysły. – wlingke

+0

Chciałem również dodać do tego konkretnego scenariusza 'browser.get()' możesz również sprawdzić stronę, na której jesteś, używając 'browser.getCurrentUrl()' i sprawdź bieżącą stronę przed "pobraniem" jej. – wlingke

3

Jasmine2 ma beforeAll() a przecież(), która biegnie raz dla całego pakietu.