2016-05-23 15 views
1

Ich habe einen Controller, für den ich Tests schreibe, und der Controller hat eine Funktion, die ausgeführt wird, wenn der Controller geladen wird. Diese Funktion hat eine if-Anweisung, die ich für beide Szenarien testen möchte. Mein Problem ist, dass der $ scope, den ich lade, nur für das "if" und nicht für das else gesetzt ist, also bin ich mir nicht sicher, wie ich das else testen soll. Ich habe versucht, "skillList" auf ein Array zu setzen, das die Funktion in den else-Teil bringen würde, aber das funktioniert nicht. Gibt es eine Möglichkeit, den Controller beim Testen des "it" neu zu laden?Karma-Test, Freigabe-Controller mit anderem Datensatz

Dies ist die Funktion in meinem Controller

function loadIt() { 
    if (!someService.skillList.length) { 
     someService.getCategories().then(function(res) { 
     someService.skillsLoaded = true; 
     }); 
    } else { 
     someService.skillcategories = someService.parseCategories(someService.skillList); 
     someService.skillsLoaded = true; 
    } 
    } 

    loadIt(); 

Und in meinem Test habe ich

beforeEach(function() { 
    return inject(function($injector) { 
     this.someService = { 
     skillList: [], 
     getCategories: function() { 
     var deferred = $q.defer(); 
     deferred.resolve(); 
     return deferred.promise; 
     }, 
     parseCategories: function(param) { 
     return param; 
     } 
    }; 

So sind die Prüfkräfte bis skillList als leeres Array, die ich für diesen Abschnitt einen Test haben, aber Ich möchte das Else testen, wo ich skillList sein muss [1, 2]. Ideen?

Antwort

0

Ja, können Sie im Rahmen passieren, wenn Sie Ihren Controller in den Tests wie diese erstellen möchten:

var scope = $rootScope.$new(); 
scope.skillcategoriesList = ['list', 'goes', 'here']; 

var controller = $controller('ControllerName', { $scope: scope });