2014-11-04 3 views
1

У меня есть вложенное контроллер, как показано ниже:AngularJS Жасмин тест блока, как придать родительскую область

<div ng-controller="ParentController">{{ data.value }} 
    <div ng-controller="ChildController">{{ data.value }}</div> 
</div> 

 

app.controller('ParentController', function ($scope) { 
     $scope.data = { 
      value: "A" 
     } 
    }); 

Мой контроллер ребенок задает родительскую сферу, как показано ниже:

app.controller('ChildController', function ($scope) { 
    $scope.data.value = "B"; 
}); 

Мой модульный тест Jasmine:

describe('ChildController', function() { 
    var scope, $rootScope; 

    beforeEach(inject(function ($controller, _$rootScope_) { 
     $rootScope = _$rootScope_; 
     scope = $rootScope.$new(); 
     $controller('ChildController', { $scope: scope}); 
     scope.$digest(); 
    })); 

    it('should change parent scope', function() { 
     expect(scope.data.value).toEqual("B"); 
    }); 

}); 

Результаты испытаний в "Cannot read property 'value' of undefined".

Как я могу протестировать дочерний контроллер, который использует родительскую область?

ответ

2

Это действительно зависит от того, что вы хотите проверить. Если вы хотите утверждать, что дочерний контроллер меняет значение во время его инициализации, просто установите значение для теста для изменения. Вам не нужно проверять иерархию областей Angular.

Итак, я предлагаю просто сделать это:

describe('ChildController', function() { 
    var scope, $rootScope; 

    beforeEach(inject(function ($controller, _$rootScope_) { 
     $rootScope = _$rootScope_; 
     scope = $rootScope.$new(); 

     //setup 
     scope.data = { value: "A" }; 

     $controller('ChildController', { $scope: scope}); 
     scope.$digest(); 
    })); 

    it('should change parent scope', function() { 
     expect(scope.data.value).toEqual("B"); 
    }); 
}); 
+0

Результаты теста все еще дают мне ошибку «Невозможно установить значение свойства« неопределенного »на ChildController. – user3213420

+0

Не запускайте дайджест. –

0

инициализирован $ scope.data = {};

app.controller('ChildController', function ($scope) { 
$scope.data={}; 
$scope.data.value = "B"; 

});

Смежные вопросы