AngularJS макет ngChange для выбора в модульном тесте - PullRequest
0 голосов
/ 11 марта 2019

Я хочу UT событие onchange для поля выбора.

HTML -

<select id="basetype" ng-model="role.baseType"
        ng-options="basePolicy"
        ng-change="populateSettingsForBaseType()">
</select>

Обработчик событий контроллера -

private addBaseTypeChangeHandler(): void {
    this.$scope.populateSettingsForBaseType = () => {
      //someCode
    };
}

Я хочу убедиться, что обработчик события называется событием onchange -

it('should add the certificate validator', function() {
      spyOn($scope, 'populateSettingsForBaseType').and.callThrough();
      const html = '<select id="basetype" ng-change="populateSettingsForBaseType()" ng-model="model"></select>';

      const element = $compile(html)($scope);

      const elem = element.find('select').trigger('change');

      const ngModel = element.controller('ngModel');
      ngModel.$viewValue = 'full';

      $scope.$digest();
      expect($scope.populateSettingsForBaseType).toHaveBeenCalled();
    });

Это не работает. Как правильно вызвать событие и убедиться, что обработчик вызывается из UT.

1 Ответ

0 голосов
/ 12 марта 2019
it('should add the certificate validator', function() {
      spyOn($scope, 'populateSettingsForBaseType').and.callThrough();
      const html = '<select id="basetype" ng-change="populateSettingsForBaseType()" ng-model="model"></select>';

      const element = $compile(html)($scope);

      ̶c̶o̶n̶s̶t̶ ̶e̶l̶e̶m̶ ̶=̶ ̶e̶l̶e̶m̶e̶n̶t̶.̶f̶i̶n̶d̶(̶'̶s̶e̶l̶e̶c̶t̶'̶)̶.̶t̶r̶i̶g̶g̶e̶r̶(̶'̶c̶h̶a̶n̶g̶e̶'̶)̶;̶

      const ngModel = element.controller('ngModel');
      ̶n̶g̶M̶o̶d̶e̶l̶.̶$̶v̶i̶e̶w̶V̶a̶l̶u̶e̶ ̶=̶ ̶'̶f̶u̶l̶l̶'̶;̶
      ngModel.$setViewValue('full');

      $scope.$digest();
      expect($scope.populateSettingsForBaseType).toHaveBeenCalled();
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...