6

ページに 2 つのコントローラーがあります。それらは HTML マークアップに「ラップ」され、一方が「親」で、もう一方が「子」になります。

<div id="parent" ng-controller="parentController">
    <div id="child" ng-controller=childController">
    </div>
</div>

私のコントローラーの JS ファイルでは、「子」コントローラーの「親」コントローラーからオブジェクトを参照します。

親コントローラー:

angular.module('myApp').controller('parentController', function($scope){
    $scope.myReferencedObject = {};
    $scope.myReferencedObject.someProperty = "hello world";
});

子コントローラー:

angular.module('myApp').controller('childController', function($scope){
    $scope.childControllerVariable = $scope.myReferencedObject.someProperty;
});

「子」コントローラーは「親」コントローラー内にネストされているため、親コントローラーのオブジェクトは子コントローラーに継承されます。

すべてのファイルが個々のユニットに分割され、個別にテストされるため、これは Karma テストでは機能しません。プロトタイプの$scope.myReferencedObject.someProperty継承がないため、単体テスト時に「子」コントローラーで参照が定義されていません。

Karma でこの問題を解決するにはどうすればよいですか?

4

2 に答える 2

9

$scope を初期化して、内部コントローラーをテストするときに好きなようにできるので、親コントローラーが設定した内容をモック化できます

var controllerInstance;
beforeEach(inject(function ($controller, $rootScope) {
    scope = $rootScope.$new();
    scope.myReferencedObject = {someProperty: 'hello world'}
    controllerInstance = $controller('childController', {
      $scope: scope
    });
}));
于 2014-05-01T15:13:20.103 に答える