2016-09-09 1 views
1

Ich verwende den Controller als Syntax aus eckigen und ich möchte meinen Code mit Jasmin und Sinon testen.Testen von JavaScript-Funktionen - die für den Controller nicht sichtbar sind (eckig)

Lassen Sie uns sagen, dass ich die folgenden Controller-Code wollen:

angular 
    .module('Test') 
    .controller('TestController', TestController); 

TestController.$inject = []; 

function TestController() { 
     var viewModel = this; 

     viewModel.myFunction = myFunction; 

     function myFunction(){ 
      //do something 
      //now call a helper function 
      helperFunction() 
     } 

     function helperFunction(){ 
      // .... 
     } 
} 

Meine Frage ist, wie ich die helperFunction testen können() oder sogar einen Spion auf sie setzen? Mein Helfer ist in meinem Test nicht sichtbar.

Hier ist mein Test:

(function() { 

    'use strict'; 

    var myController; 

    describe('Test', function() { 

     beforeEach(module('Test')); 

     beforeEach(inject(function ($controller, $injector) {   
       myController = $controller('TestController'); 
     })); 

     it('Tests helperFunction', function(){ 

       var sinonSpy = sinon.spy(myController, 'helperFunction'); 

       //perform the action 
       myController.myFunction(); 

      //expect the function was called - once 
      expect(sinonSpy .callCount).toEqual(1); 
      } 
    }) 
}) 

Antwort

0

Versuch, dies zu tun:

var vm = controller("helperFunction", { $scope: scope }); 

und dann:

vm.myFunction(); 
3

Sie können nicht den Zugriff auf diese Funktionen haben. Wenn Sie eine benannte JS Funktion definieren ist es die gleiche wie zu sagen:

var helperFunction = function(){}; 

In diesem Fall wäre es ziemlich klar zu sehen, dass die var innerhalb des Blockes nur im Rahmen ist, und es gibt keinen externen Verweis darauf aus der Verpackungs-Controller.

Um eine Funktion testbar zu machen, müssen Sie sie zum $ scope des Controllers hinzufügen.

viewModel.helperFunction = helperFunction; 

Aber seien Sie sich bewusst, dass es keine gute Idee ist, alles bloßzustellen, um es testbar zu machen. Sie müssen wirklich prüfen, ob es die Prüfung tatsächlich

0

Fügen Sie den folgenden Code in die Controller einen Wert zu Ihrem Projekt hinzufügen:

angular.extend($scope, { 
     helperFunction:helperFunction 
    }); 
Verwandte Themen