1

角度で単体テストを使用したいのですが、webapp私が取り組んでいるのは、その構造に基づいて作成されています。例えば ​​:

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

そしてそのコントローラーの1つ:

(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] Module 'DashboardCtrl' is not available! モジュール名のつづりを間違えたか、モジュールをロードするのを忘れました。モジュールを登録する場合は、依存関係を 2 番目の引数として指定してください。

"DashboardCtrl"これは、コントローラーが見つからないことを示しています。

4

2 に答える 2

1

filesのオプションにすべてのモジュールを追加することで解決される問題karma.conf.js

ポイントは、注入されたモジュールの1つのイベントレイクがメインモジュールであり、ここでappテストを停止するため、すべてのモジュールを追加する必要があるコントローラーを含めることに加えて、言及されています。

于 2016-03-12T10:55:40.877 に答える
0

単体テストでは、コントローラ インスタンスのハンドルを取得するために $controller を使用しますhttps://docs.angularjs.org/api/ng/service/ $controller likevar ctrlToTest = $controller('EditorCtrl')(newTestScope); 新しいテスト スコープを作成するには、使用できますvar newTestScope = $rootScope.$new()

于 2016-03-12T09:25:00.383 に答える