2016-06-02 5 views
0

Ich habe Mühe zu verstehen, warum mein Code nicht funktioniert und warum die Tests fehlschlagen, wenn ich eine einfache beforeAll() anstelle einer beforeEach() in einer verschachtelten beschreibenden Suite von Tests verwende? Hier ein kleines Beispiel ist mein Problem zu umreißen:Jasmine: warum beforeEach() funktioniert in verschachtelten beschreiben aber beforeAll() nicht?

describe("myService", function() { 
    // Basic services 
    // Some variables 

    beforeEach(module('app')); // Invoke the module 
    beforeEach(function(){ 

    // Inject the services 
    inject(function(_myService_) { 
     myService = _myService_; 
    }); 
    }); 

    /************************ Add more unit tests here ************************/ 

    describe("myFunction", function() { 
    describe("calls function with one set of input paramenters", function() { 

     //beforeAll(function() { 
     beforeEach(function() { // <-- Why this works but beforeAll doesn't??? 
     // Call myFunction with different parameters 
     result = myService.myFunction(parametersType_1); 
     }); 

     it("should do tests on result (the return from the function)", function() { 
     }); 
    }); 

    describe("calls function with other set of input paramenters", function() { 

    //beforeAll(function() { 
    beforeEach(function() { // <-- Why this works but beforeAll doesn't??? 
     // Call myFunction with different parameters 
     result = myService.myFunction(parametersType_2); 
    }); 

    it("should do tests on result (the return from the function)", function() { 
    }); 
    }); 
}); 

Antwort

2

Ändern Sie den Abschnitt, wo Sie den Dienst einer beforeAll anstelle eines before injizieren:

beforeAll(function(){ 

    // Inject the services 
    inject(function(_myService_) { 
    myService = _myService_; 
}); 

Die before im äußeren beschreiben wird nicht feuern Sie vor jedem verschachtelten Beschreibungsabschnitt ab, es wird vor jedem "es" innerhalb des Beschriebenen ausgelöst. Da das innere beforeAll vor dem beforeEach im äußeren describe ausgelöst wird, versuchen Sie, den Dienst zu verwenden, bevor es injiziert wurde.

So zum Beispiel:

describe("outer describe", function() { 

beforeAll(function() { 
    console.log("A"); 
}); 

beforeEach(function() { 
    console.log("B"); 
}); 

describe("inner describe", function() { 
    beforeAll(function() { 
     console.log("C"); 
    }); 

    beforeEach(function() { 
     console.log("D"); 
    }); 

    it("test", function() { 
    })' 
}); 

}); 

in der Reihenfolge ausgeführt wird: A, C, B, D

Verwandte Themen