从呼叫噶和Jasmine测试控制器功能 [英] Call a controller function from Karma and Jasmine testing

查看:106
本文介绍了从呼叫噶和Jasmine测试控制器功能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的角度控制器: -

  angular.module(编辑控制器,[])。
        控制器('NavCtrl',函数($范围,$位置,BasketNavigationService){$ scope.test =功能(){
                $ scope.testVar = BasketNavigationService.showBasketList();
            };
        });

测试类

 描述('NavCtrl',函数(){
    VAR范围,$位置,createController;    beforeEach(注(函数($ rootScope,$控制器_ $位置指定:){
        $位置= _ $位置指定:;
        范围= $ rootScope $新的()。        createController =功能(){
            返回$控制器('NavCtrl',{
                '$范围:范围
            });
        };
    }));    它('调用测试时,应该创建$ scope.testVar',
        功能(){
          期待(scope.testVar).to​​BeUndefined();
          scope.test();
          期待(scope.testVar).to​​BeDefined();
      });
});

得到一个错误,当我运行测试用例: - scope.test()是不确定的。

如果我删除的 BasketNavigationService 从控制器功能,那么它是工作..

请帮我解决了因果报应的测试用例。


解决方案

这里的工作演示,希望它帮助。
问题是与注射的依赖关系。

\r
\r

// --- code -------- ------------------\r
(函数(角){\r
  //创建模块\r
  VAR对myApp = angular.module('对myApp',[]);\r
\r
  //控制器,计数改变其名成员\r
  myApp.controller('MyCtrl',['$范围,BasketNavigationService',\r
    功能($范围,BasketNavigationService){\r
\r
      $ scope.test =功能(){\r
        $ scope.testVar = BasketNavigationService.showBasketList();;\r
      };\r
    }\r
  ]);\r
\r
\r
})(角度);\r
\r
\r
\r
// --- SPECS -------------------------\r
\r
描述(对myApp',函数(){\r
  VAR范围,\r
    控制器;\r
  beforeEach(函数(){\r
    模块('对myApp');\r
  });\r
\r
  描述(MyCtrl',函数(){\r
    beforeEach(注(函数($ rootScope,$控制器){\r
      范围= $ rootScope $新的()。\r
      控制器= $控制器('MyCtrl',{\r
        '$范围:范围,\r
        BasketNavigationService:{\r
          showBasketList:功能(){\r
            返回null;\r
          }\r
        }\r
      });\r
    }));\r
    它('调用测试时,应该创建$ scope.testVar',\r
      功能(){\r
        期待(scope.testVar).to​​BeUndefined();\r
        scope.test();\r
        //范围$消化();\r
        期待(scope.testVar).to​​BeDefined();\r
      });\r
  });\r
\r
\r
});\r
\r
// ---亚军-------------------------\r
(函数(){\r
  变种jasmineEnv = jasmine.getEnv();\r
  jasmineEnv.updateInterval = 1000;\r
\r
  VAR htmlReporter =新jasmine.HtmlReporter();\r
\r
  jasmineEnv.addReporter(htmlReporter);\r
\r
  jasmineEnv.specFilter =功能(SPEC){\r
    返回htmlReporter.specFilter(规范);\r
  };\r
\r
  VAR currentWindowOnload =的window.onload;\r
\r
  在window.onload =函数(){\r
    如果(currentWindowOnload){\r
      currentWindowOnload();\r
    }\r
    execJasmine();\r
  };\r
\r
  功能execJasmine(){\r
    jasmineEnv.execute();\r
  }\r
\r
})();

\r

&LT;脚本SRC =htt​​p://jasmine.github.io/1.3 /lib/jasmine.js\"></script>\r
&所述; SCRIPT SRC =htt​​p://jasmine.github.io/1.3/lib/jasmine-html.js&GT;&下; /脚本&GT;\r
&LT;脚本SRC =HTTPS://$c$c.angularjs.org/1.2.9/angular.js&GT;&LT; / SCRIPT&GT;\r
&LT;脚本SRC =HTTPS://$c$c.angularjs.org/1.2.9/angular-mocks.js&GT;&LT; / SCRIPT&GT;\r
\r
&LT;链接HREF =htt​​p://jasmine.github.io/1.3/lib/jasmine.css的rel =stylesheet属性/&GT;

\r

\r
\r

提琴: http://jsfiddle.net/invincibleJai/pf1deoom/1/

This is my angular controller :-

 angular.module('authoring-controllers', []).
        controller('NavCtrl', function($scope, $location, BasketNavigationService) {

$scope.test= function() {
                $scope.testVar = BasketNavigationService.showBasketList();
            };
        });

TEST class

describe('NavCtrl', function() {
    var scope, $location, createController;

    beforeEach(inject(function ($rootScope, $controller, _$location_) {
        $location = _$location_;
        scope = $rootScope.$new();

        createController = function() {
            return $controller('NavCtrl', {
                '$scope': scope
            });
        };
    }));

    it('should create $scope.testVar when calling test', 
        function() {
          expect(scope.testVar).toBeUndefined();
          scope.test();
          expect(scope.testVar).toBeDefined();
      });
});

Getting an error when i run that test case :- scope.test() is undefined..

If i removed BasketNavigationService functionality from controller then it is working..

Please help me to solve that karma test case.

解决方案

here is the working demo , hope it helps. problem was with injecting the dependencies.

//--- CODE --------------------------
(function(angular) {
  // Create module
  var myApp = angular.module('myApp', []);

  // Controller which counts changes to its "name" member
  myApp.controller('MyCtrl', ['$scope', 'BasketNavigationService',
    function($scope, BasketNavigationService) {

      $scope.test = function() {
        $scope.testVar = BasketNavigationService.showBasketList();;
      };
    }
  ]);


})(angular);



// ---SPECS-------------------------

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

  describe('MyCtrl', function() {
    beforeEach(inject(function($rootScope, $controller) {
      scope = $rootScope.$new();
      controller = $controller('MyCtrl', {
        '$scope': scope,
        'BasketNavigationService': {
          showBasketList: function() {
            return null;
          }
        }
      });
    }));
    it('should create $scope.testVar when calling test',
      function() {
        expect(scope.testVar).toBeUndefined();
        scope.test();
        //     scope.$digest();
        expect(scope.testVar).toBeDefined();
      });
  });


});

// --- Runner -------------------------
(function() {
  var jasmineEnv = jasmine.getEnv();
  jasmineEnv.updateInterval = 1000;

  var htmlReporter = new jasmine.HtmlReporter();

  jasmineEnv.addReporter(htmlReporter);

  jasmineEnv.specFilter = function(spec) {
    return htmlReporter.specFilter(spec);
  };

  var currentWindowOnload = window.onload;

  window.onload = function() {
    if (currentWindowOnload) {
      currentWindowOnload();
    }
    execJasmine();
  };

  function execJasmine() {
    jasmineEnv.execute();
  }

})();

<script src="http://jasmine.github.io/1.3/lib/jasmine.js"></script>
<script src="http://jasmine.github.io/1.3/lib/jasmine-html.js"></script>
<script src="https://code.angularjs.org/1.2.9/angular.js"></script>
<script src="https://code.angularjs.org/1.2.9/angular-mocks.js"></script>

<link href="http://jasmine.github.io/1.3/lib/jasmine.css" rel="stylesheet" />

fiddle : http://jsfiddle.net/invincibleJai/pf1deoom/1/

这篇关于从呼叫噶和Jasmine测试控制器功能的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆