2016-06-30 3 views
1

Я пытаюсь протестировать двухстороннюю привязку в пользовательской директиве с использованием жасмина.Можно ли проверить двустороннюю привязку scope.trains в директиве с использованием жасмина?

Это ЯШИ:

angular.module('MyServiceModule',[]); 

angular.module('MyServiceModule').controller('MyController',MyController); 
angular.module('MyServiceModule').directive('trainDirective',trainDirective); 



function MyController($http) 
{ 
    console.log('MyController'); 
    vm = this; 

    vm.openCreateQuoteScreen = function(trainName) 
    { 
      alert("train type"+trainName); 
    } 

    vm.trainList = [ 
         {"trainName":"Shatabdi"}, 
         {"trainName":"Rajdhani"} 
        ]; 
} 



function trainDirective() 
{ 
    return{ 
     restrict: 'E', 
     template: '<div>TRAIN LIST</div>'+ 
        '<ul data-ng-repeat="train in trains">'+ 
        '<li>{{ train.trainName }}</li></ul>', 

     scope: { 
      trains: '=', 

     }, 
    }; 
} 

Это HTML:

<div ng-app="MyServiceModule" ng-controller="MyController as MyCtrl" > 
    <train-directive trains="MyCtrl.trainList"> </train-directive> 
</div> 

Как я могу записать данные испытания 2-обязательную силу в ниже тесте:

describe('my directive', function(){ 
beforeEach(module('MyServiceModule')); 

beforeEach(function(){ 
     element=angular.element('<train-directive trains="MyCtrl.trainList"> </train-directive>'); 
     compiledElement = $compile(element)(scope); 
     scope.$digest(); 
    }); 
}); 
it('should test two-way data binding',function(){ 
    element.isolateScope().trains = "My trains"; 


     //Now I want to test if the same value is reflected in the parent scope's trainList variable. 

expect(scope.trainList).toEqual('My trains'); 

    }); 

Что я Я здесь делаю неправильно? Может ли кто-нибудь объяснить, как я могу его исправить?

ответ

0

Привязки не обновляются магически, они обновляются на дайджесте. MyCtrl.trainList следует изменить на trainList, так как scope не принадлежит к реальному контроллеру с контроллером. Синтаксис и не имеет MyCtrl объекта.

Это должно быть

element.isolateScope().trains = "My trains"; 
    scope.$digest(); 
    ... 
+0

Есть ли способ, что я могу проверить его с синтаксисом «controllerAs»? –

+0

@A_J 'controllerAs' функциональность проверена компанией Google, вы можете занять свое слово. Эта спецификация специально проверяет привязку «train-directive» и не должна знать «MyController». Хорошая идея в отношении директив с изолированной областью заключается в том, что их можно использовать и тестировать изолированно, нет необходимости воссоздавать для них условия окружающей среды. – estus

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