2016-09-09 34 views
1

我使用控制器作为角度的语法,我想用茉莉花和sinon测试我的代码。测试javascript函数 - 对控制器不可见(角度)

比方说,我想下面的控制器代码:

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(){ 
      // .... 
     } 
} 

我的问题是我怎么能测试helperFunction()或者甚至把间谍就可以了?我的帮手在我的测试中不可见。

这里是我的测试:

(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); 
      } 
    }) 
}) 

回答

0

尝试这样做:

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

然后:

vm.myFunction(); 
3

你不能访问这些功能。当你定义一个名为JS功能,它是相同的话说:

var helperFunction = function(){}; 

在这种情况下,这将是很清楚的看到了var仅在块内的范围,没有外部引用从它包装控制器。

要使功能可测试,您需要将其添加到控制器的$范围。

viewModel.helperFunction = helperFunction; 

但请注意,暴露一切只是为了使其可测试不是一个好主意。你真的需要考虑,如果测试将一些值实际上添加到您的项目

0

下面的代码添加到您的控制器:

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