【问题标题】:How to access angular app module that is defined in self invoke?如何访问在自调用中定义的角度应用程序模块?
【发布时间】:2018-08-03 02:34:42
【问题描述】:

我想在 Angular 中使用单元测试,但我正在处理它的 webapp 是在它的欠结构上创建的。例如:

(function() {
'use strict';
angular
  .module('app', [
    'ngAnimate',
    'ui.load',
    'ui.jp',
    'oc.lazyLoad'
  ]);})();

及其控制器之一:

(function() {
'use strict';
angular
    .module('app')
    .controller('EditorCtrl', EditorCtrl);

    function EditorCtrl($scope) {
      var vm = $scope;
      vm.options = {
        toolbar: [
          ['style', ['bold', 'italic', 'underline', 'clear']],
        ]
      };
    }})();

而且我不知道如何对这个应用使用单元测试,因为我的测试找不到控制器。

这是我的控制器和测试:

   (function () {
  'use strict';
  angular
    .module('app')
    .controller('DashboardCtrl', dashboard);
    describe('test dashboard', function () {

      beforeEach(module('DashboardCtrl'));

      var $controller;

      beforeEach(inject(function (_$controller_) {
        $controller = _$controller_;
      }));

      describe('sum', function () {
        it('1 + 1 should equal 2', function () {
          var $scope = {};
          var controller = $controller('DashboardCtrl', {$scope: $scope});
          $scope.x = 1;
          $scope.y = 2;
          $scope.sum();
          expect($scope.z).toBe(3);
        });

        it('z should default to zero', function () {
          var $scope = {};
          var controller = $controller('DashboardCtrl', {$scope: $scope});
          expect($scope.z).toBe(0);
        });
      });

    });
  function dashboard($scope) {
    $scope.name = 'Dashboard';
    $scope.z = 0;
    $scope.sum = function () {
      $scope.z = $scope.x + $scope.y;
    };
  }


})();

在业力测试中给我看这个error

错误:[$injector:modulerr] 无法实例化模块 DashboardCtrl,原因如下: 错误:[$injector:nomod] 模块“DashboardCtrl”不可用!您要么拼错了模块名称,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。

表示找不到"DashboardCtrl"控制器。

【问题讨论】:

    标签: angularjs unit-testing self-invoking-function


    【解决方案1】:

    通过在karma.conf.jsfiles选项中添加所有模块解决的问题

    重点是注入的模块之一的事件湖是主模块,这里是app 停止您的测试,因此除了包含您的控制器之外,您还需要添加所有模块。

    【讨论】:

      【解决方案2】:

      当单元测试使用 $controller 来获取控制器实例 https://docs.angularjs.org/api/ng/service/$controller 的句柄,例如 var ctrlToTest = $controller('EditorCtrl')(newTestScope); 要创建新的测试范围,您可以使用 var newTestScope = $rootScope.$new()

      【讨论】:

      • 在控制器文件中使用这个?
      猜你喜欢
      • 2020-10-25
      • 2020-04-12
      • 1970-01-01
      • 2022-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 2018-05-30
      相关资源
      最近更新 更多