2016-05-26 14 views
1

Ich bin neu in AngularJS und versuche Unit Testing.Ich verwende Karma und Jasmin. Ich habe den ersten Test für meinen Controller erstellt, aber es funktioniert nicht und ich weiß nicht, warum Karma einen Fehler durchläuft.AngularJS Controller Unit Test

Also bitte hilf mir dabei.

BasicTabCtrl.js

// Basic Tab Controller 
myApp.controller('BasicTabCrtl', ['$scope', '$modal', 'BasicTabService', function ($scope, $modal, BasicTabService) { 
    console.log("BAsic tab crtl"); 

    $scope.name = 'testing'; 
    $scope.tab1 = "BASIC"; 
    $scope.tab2 = "ADVANCE"; 
    $scope.tab3 = "FORM"; 

    $scope.user = {}; 
    // get user from service 
    $scope.Tablelist = BasicTabService.getUser(); 

    // delete user 
    $scope.deleteUser = function (obj) { 
     console.log("OBJ => " + JSON.stringify(obj)); 
     if (obj != -1) { 
      $scope.Tablelist.splice(obj, 1); 
     } 
    } 
}]); 

Hier ist mein Testfall

example.js

describe('myApp',function(){ 
var scope,controller; 

beforeEach(function(){ 
    module('myApp'); 
}); 

    describe('BasicTabCrtl',function(){ 

    beforeEach(inject(function($rootScope,$controller){ 
     scope = $rootScope.$new(); 
     controller=$controller('BasicTabCrtl',{ 
      '$scope':scope 
     }); 
     console.log("d"); 
    })); 

    it('set the name',function(){ 
     expect(scope.name).toBe('testing'); 
    }); 

    }); 

}); 

Fehler

26 05 2016 20:47:50.890:INFO [watcher]: Changed file "/home/rahul/Documents/django_project/myfirstsite/test/example.js". 
Firefox 46.0.0 (Ubuntu 0.0.0) myApp BasicTabCrtl set the tab1 name FAILED 
    minErr/<@/home/rahul/Documents/django_project/myfirstsite/static/js/angular.js:68:12 
    loadModules/<@/home/rahul/Documents/django_project/myfirstsite/static/js/angular.js:4587:15 
    [email protected]/home/rahul/Documents/django_project/myfirstsite/static/js/angular.js:322:11 
    [email protected]/home/rahul/Documents/django_project/myfirstsite/static/js/angular.js:4548:5 
    [email protected]/home/rahul/Documents/django_project/myfirstsite/static/js/angular.js:4470:19 
    [email protected]/home/rahul/Documents/django_project/myfirstsite/static/js/angular-mocks.js:2954:44 
    TypeError: scope is undefined in /home/rahul/Documents/django_project/myfirstsite/test/example.js (line 19) 
    @/home/rahul/Documents/django_project/myfirstsite/test/example.js:19:3 
Firefox 46.0.0 (Ubuntu 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.023 secs/0.018 secs) 
+0

Sie vermissen buchstabiert '$ Controller' – maurycy

+0

Entschuldigung dafür, aber nicht funktioniert –

+0

Es sieht aus wie es fehlgeschlagen, ein oder mehrere Module zu laden. Zeigt deine Karma-Datei auf alle benötigten js-Dateien? –

Antwort

0

Ich glaube, die Injektion nicht wegen fehlender _ um Winkel Methoden arbeitet

describe('myApp',function(){ 
var scope,controller; 

beforeEach(function(){ 
    module('myApp'); 
}); 

    describe('BasicTabCrtl',function(){ 

    beforeEach(inject(function(_$rootScope_, _$controller_){ 
     scope = _$rootScope_.$new(); 
     controller = $controller('BasicTabCrtl',{ 
      '$scope':scope 
     }); 
     console.log("d"); 
    })); 

    it('set the name',function(){ 
     expect(scope.name).toBe('testing'); 
    }); 

    }); 

}); 
0

Try this:

erstellen Controller-Instanz:

callController = function() { 
     return $controller('BasicTabCrtl', { 
      $scope: scope, 
      $routeParams: routeParams 
     }); 
     }; 

Dann Testen Sie, ob es definiert ist oder nicht. Wenn dieser Test bestanden wird, können Sie mit dem Komponententest fortfahren.

0

Das Problem mit Ihrem Code ist, dass Sie nicht alle Abhängigkeiten injizieren, wenn Sie Ihren Controller instanziieren. Versuchen Sie, diese ...

beforeEach(inject(['$scope', '$modal', 'BasicTabService', '$controller', '$rootScope', function ($scope, $modal, BasicTabService, $controller, $rootScope){ 
    scope = $rootScope.$new(); 
    controller=$controller('BasicTabCrtl',{ 
     '$scope':$scope, 
     '$modal':$modal, 
     'BasicTabService': BasicTabService 
    }); 
    console.log("d"); 
})); 

versuchen meine Antwort von Jasmine, Karma, Angular how to write test on my Angular app?. Ich beschreibe, wie Controller, Dienste und Anweisungen getestet werden.