2016-03-21 7 views
1

Ich bin mir ziemlich sicher, dass ich das irgendwo gelesen habe, aber ich kann die Dokumentation jetzt nicht finden. Wenn ich zwei beforeEach Blöcke im selben describe Block habe, wird das garantiert sequentiell laufen? IE:Sind beforeJede Blöcke im selben Bereich nacheinander ausgeführt?

describe("foo", function(){ 
    beforeEach(function(){ 
    print("I'm always first!"); 
    } 

    beforeEach(function(){ 
    print("I'm always second!"); 
    } 
} 
+1

Warum verwenden Sie dann einen? – Pavlo

+0

@Pavlo Weil mein Anwendungsfall etwas komplizierter ist (Angular 'module' /' inject's und so). –

+0

ja, es wird sequentiell ausgeführt.Andernfalls können Sie vorher mit injizierten Modul direkt nach Ihren Testfällen schreiben –

Antwort

1

Von http://jasmine.github.io/2.0/introduction.html

Anrufe können beschreiben verschachtelt werden, mit Angaben auf jeder Ebene definiert. Dies ermöglicht, dass eine Suite als ein Baum von Funktionen zusammengesetzt wird. Bevor eine Spezifikation ausgeführt wird, läuft Jasmine den Baum hinunter, wobei sie jeweils vor der Funktion ausführt. Nachdem die Spezifikation ausgeführt wurde, durchläuft Jasmine die afterEach-Funktionen ähnlich.

Hier ist der Beispielcode meiner aktuellen App.

nodeApp ist Hauptmodul

describe("\n\nuser registration form testing", function() { 

    beforeEach(module("views/createuser/createuser.html"), function() { 

    }); 

    describe("\n\nUser createtion form should have valid data", function() { 
     beforeEach(module("nodeApp")); 
     beforeEach(inject(function($rootScope, $compile, $controller, $templateCache) { 

     })) 

    });  
}); 

Wenn ich die beforeEach(module("nodeApp")); nach dem second beforeEach setzen seine werfen ein error.Because nodeApp das Modul zum Injizieren der alle Dienste verantwortlich ist. Also, später ist es für die Injektion in der zweiten beforeEach

2

Wenn Sie einen Blick auf den Quellcode des Jasmin in Suite.js nehmen sie sie in der umgekehrten Reihenfolge fügt als in der sie hinzugefügt werden.

Suite.prototype.beforeEach = function(fn) { 
    this.beforeFns.unshift(fn); 
}; 

Dann in der Env.js können Sie sehen, dass, bevor sie ausgeführt werden, werden sie umgekehrt:

var beforeAndAfterFns = function(suite) { 
    return function() { 
    var befores = [], 
     afters = []; 

    while(suite) { 
     befores = befores.concat(suite.beforeFns); 
     afters = afters.concat(suite.afterFns); 

     suite = suite.parentSuite; 
    } 

    return { 
     befores: befores.reverse(), 
     afters: afters 
    }; 
    }; 
}; 

Wie die ganze Zeit, die sie in Array gehalten werden, würde ich sagen, dass ja sie ausgeführt werden der Reihe nach die ganze Zeit.

+0

warte .. wirklich? Sie legen sie in umgekehrter Reihenfolge, dann ... kehren sie um und enden mit der regulären Ordnung? Was ist damit? Wie auch immer, solange sie in Ordnung sind, ist alles in Ordnung, denke ich. –

+0

Ich bin nicht wirklich sicher, warum das so geht. Im Code werden die Werte vor und nach dem Öffnen verschoben, während zuvor alle und danach alle normalerweise in das Array geschoben werden. Dann vor der Verarbeitung, sie tatsächlich die Reihenfolge von vor, was bedeutet, dass sie in der gleichen Reihenfolge wie deklariert werden soll, während sie dies für afterEach beibehalten, so dass AfterEach in anderer Reihenfolge als deklariert. –

Verwandte Themen