茉莉花测试$ scope is undefinded

时间:2015-08-22 10:59:47

标签: angularjs karma-jasmine

我尝试使用带有茉莉花的业力来编写控制器测试。 我收到此错误“错误:[$ injector:unpr]未知的SettingsProvider< - settings” 我被困了几个小时谷歌搜索但我无法找到解决方案。

我的测试用例

describe('MyController', function() {


     var $scope, controller;

     beforeEach(module('MyApp'));
     beforeEach(inject(function ($rootScope, $controller) {
         $scope = $rootScope.$new();
         controller = $controller('MyController', { 
            $scope: $scope
         });

     }));
     it('sets the options to "valid" if the type is  val', function() {
          var type = 'val';
          $scope.callOptions(type);
          expect($scope.options).toBeTruthy();
    });

});

我的karma.config.js

 files: [
      'app/bower_components/angular/angular.js',
      'app/bower_components/jquery/dist/jquery.min.js',  
      'app/node_modules/angular-mocks/angular-mocks.js', 
      'app/bower_components/angular-resource/angular-resource.js',  
      'app/bower_components/angular-ui-router/release/angular-ui-router.js',
      'app/bower_components/angular-ui-router/release/angular-ui-router.min.js',
      'app/metronic/assets/global/plugins/angularjs/plugins/angular-ui-router.min.js',
      'app/bower_components/ui-router-extras/release/modular/ct-ui-router-extras.sticky.js',
      'app/bower_components/ngDraggable/ngDraggable.js',
      'app/metronic/assets/global/plugins/angularjs/angular-sanitize.min.js',
      'app/metronic/assets/global/plugins/jquery.min.js',
      'app/metronic/assets/global/plugins/bootstrap/js/bootstrap.min.js',
      'app/metronic/assets/global/plugins/angularjs/plugins/ui-bootstrap-tpls.min.js',


      'app/bower_components/ngstorage/ngStorage.min.js',
      'app/bower_components/oclazyload/dist/ocLazyLoad.min.js',

      'app/metronic/assets/global/plugins/angularjs/plugins/angular-file-upload/angular-file-upload.min.js',

      'app/js/services/myProvider.js',
      'app/js/app.js',      
      'app/controllers/MyController.js'
   ]

我的控制器:

MetronicApp.controller('MyController',
        ['$http',
            '$rootScope',
            '$scope',
            '$window',
            function ($http, $rootScope, $scope, $window) {

              $scope.callOptions = function (type) {
                    if (type == 'val') {
                        return $scope.optionsVal;
                    }
                    ;
                    if (type == 'Num') {
                        return $scope.optionsNum;
                    }
                    ;

                };
              });

修改

我从karma.config.js中删除了一些文件,现在我收到此错误$ scope is undefined ..这是错误的屏幕截图: enter image description here

1 个答案:

答案 0 :(得分:0)

我认为注入$ rootScope和$ controller的方式是不正确的。请尝试以下代码片段。它会做的。

  describe('MyController', function() {


 var $scope, controller;

 beforeEach(module('MyApp'));
 beforeEach(inject(function ($injector) {
     $scope = $injector.get("$rootScope").$new();
     controller = $injector.get("$controller")('MyController', { 
        $scope: $scope
     });

 }));
 it('sets the options to "valid" if the type is  val', function() {
      var type = 'val';
      $scope.callOptions(type);
      expect($scope.options).toBeTruthy();
});

});

相关问题