茉莉花测试 $scope 未定义

jasmine test $scope is undefinded

我尝试使用 karma 和 jasmine 编写控制器测试。 我收到此错误 "Error: [$injector:unpr] Unknown 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 ..这是错误的屏幕截图:

我认为你注入 $rootScope 和 $controller 的方式是 incorrect.Please 试试下面的代码 snippet.It 就可以了。

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

});