2013-12-13 10 views
9

Zunächst scheint der folgende Code zu funktionieren. Ich habe jedoch noch niemanden gesehen, der das macht, also frage ich mich, ob das überhaupt legitim ist und ob ich unvorhergesehene Nachteile verpasse.Winkelmesser Jasmine beschreiben Blöcke verschachtelt in einem It-Block

Der Kontext ist, dass ich einen E2E-Test mit Winkelmesser schreibe, der Jasmine-style-describe/it-Blöcke verwendet. Mein Ziel ist es, eine Seite zu laden und eine Reihe von it Testblöcken auszuführen, ohne diese Seite jedes Mal neu zu laden (weil es zeitaufwendig ist).

Das Konstrukt ich habe, ist:

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

Ich weiß, eine Alternative, dies zu tun einfach ist:

ist
describe("Homepage", function() { 

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

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

    }); 
}); 

Aber das Problem, dass ich nicht die Tests trennen kann und Sie am Ende mit einem großen it Block. Ich möchte irgendwie das Problem vermeiden, vor jedem einzelnen Mal zu laufen, aber immer noch in der Lage zu sein, eine gut getrennte Menge von Testblöcken zu haben.


By the way, ich habe dies auch versucht:

describe("Homepage", function() { 

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

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

    }); 
}); 

außer dies nicht funktioniert, wenn Sie dies mehrere Spezifikationen wie haben. Die browser.get() wird nacheinander ausgeführt, bevor die Tests ausgeführt werden.

Antwort

7

Die Assertionen in kleinere Blöcke zu zerlegen ist definitiv eine gute Idee. Jasmine ruft keine globale Setup-Funktion auf, die nur einmal ausgeführt wird. Vielleicht können Sie den Block in nur before Trick einmal das Setup ausgeführt wird:

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

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

Das ist eine gute Idee. Lass mich ein oder zwei Tage warten, bevor ich akzeptiere, um zu sehen, ob jemand andere Ideen hat. – wlingke

+0

Ich wollte auch für dieses spezielle Szenario von 'browser.get()' hinzufügen, Sie können auch die Seite, auf der Sie sich befinden, mit 'browser.getCurrentUrl()' überprüfen und die aktuelle Seite überprüfen, bevor Sie sie "holen". – wlingke

3

Jasmine2 hat beforeAll() und Afterall(), die für die gesamte Suite einmal ausgeführt wird.

Verwandte Themen