модульный тест с жасмином для элемента element.remove в postLink - angularjs директива - PullRequest
0 голосов
/ 08 июня 2018

Сбой модульного теста для метода postLink в директиве.вот код для директивы

myApp.directive("hasPermission", function() {
return {
  restrict: 'A',
  scope: {
    'entry': '='
  },
  link: function postLink(scope, element) {
    if (scope.entry === 'removal') {
      element.remove();
    }
  }
};

});

вот модульный тест, который я написал

it('has-permission test', function() {
var element = angular.element('<div has-permission entry="not-removal">customer</div>');
  var element = compile(element)(scope);
  scope.$digest();
  expect(element.html()).toBe('customer');

  var element2 = angular.element('<div has-permission entry="removal">customer</div>');
  element2 = compile(element2)(scope);
  scope.$digest();
  expect(element2.html()).toBe('');
});

второй тест (element2), где метод link долженудалить элемент не удается, сказав - ожидаемый 'customer' будет ''

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Я обнаружил проблему с моим кодом.Оказывается, была проблема с областью.Когда я передаю «удаление» как строку в HTML, оно не связывается с полем scope.entry.То, что я сделал, было присвоено значение для scope.entry и передал переменную в шаблон, а $ compile сделал все остальное.

it('has-permission test', function() {
scope.entry = 'not-removal';
var element = compile('<div has-permission="entry">customer</div>')(scope);
scope.$digest();
expect(element.html()).toBe('customer');

scope.entry = 'removal';
var element2 = compile('<div has-permission="entry">customer</div>')(scope);
scope.$digest();
expect(element2.OuterHtml).toBe(undefined);

});

Вот плункер для этого- https://next.plnkr.co/edit/HhzHENxohgwRNWCf?preview

0 голосов
/ 10 июня 2018

В вашем коде, похоже, есть небольшая проблема, вы просите удалить запись, сказав

element.remove();

, но ожидая, что этот элемент будет пустым

IЯ переписал ваш код, чтобы передать его, но я бы посоветовал вам внимательно посмотреть на ваш

мой рабочий план для этого

https://plnkr.co/edit/YhIefYrIx4U0wrZZhyxl

Кстати, просто область действия

 scope: { 
    entry:"@"
  },

из

 scope: { 
    entry:"="
  },

решит необходимость прервать ваш тест, чтобы он прошел.Я обновил планку до того же

...