简体   繁体   English

茉莉花测试$ scope未定义

[英]jasmine test $scope is undefinded

I try to write a controller test using karma with jasmine. 我尝试使用业力与茉莉花来编写控制器测试。 I get this error "Error: [$injector:unpr] Unknown SettingsProvider <- settings" I been stuck for hours googling around but I can't found a solution for this. 我收到此错误“错误:[$ injector:unpr]未知的SettingsProvider <-设置”我被困了几个小时,但无法找到解决方案。

My test Case 我的测试用例

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

});

My karma.config.js 我的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'
   ]

My controller : 我的控制器:

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

                };
              });

EDIT 编辑

I delete some file from my karma.config.js and now I get this error $scope is undefined ..This is a screen shot of the error : 我从karma.config.js中删除了一些文件,现在出现此错误$ scope是未定义的。.这是该错误的屏幕截图: 在此处输入图片说明

I think the way you injected $rootScope and $controller is incorrect.Please try following code snippet.It will do the thing. 我认为注入$ 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();
});

}); });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM