Область тестирования AngularJS в закрытой директиве - PullRequest
0 голосов
/ 11 октября 2019

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

//MAIN FILE
angular
  .module("beckon.flint.anchoredPane", ["beckon.flint.utils.eventService"])
  .directive("anchoredPane", function() {
    return {
      replace: false,
      restrict: "AE",
      templateUrl: "anchoredPane",
      transclude: true,
      scope: {
        anchoredPaneCfg: "=anchoredPane",
      },
      link: function($scope, element) {
        var clickListeningElement = element.parent();
        debugger;
        if ($scope.anchoredPaneCfg.clickSelector) {
          clickListeningElement = element.closest(
            $scope.anchoredPaneCfg.clickSelector
          );
        }
        $scope.elements = {
          root: element,
          contentPlaceholder: element.find("#contentPlaceholder"),
          anchoredPane: element.find(".anchored-pane"),
          clickListeningElement: clickListeningElement,
        };
      },
      controller: function(
        $scope,
        $rootScope,
        $compile,
        $timeout,
        $transclude,
        eventService,
        onTopService
      ) {
        //controller code
      },
    };
  });
})();

В своих тестах я смог до сих пор издеваться над включенной директивой следующим образом:

//TEST FILE
it("initializes correctly", () => {


  // Arrange
  const element = angular.element("<div><div anchored-pane='anchored-pane'>Here goes the template</div></div>");
  const getIsolatedScope = (element) => element.isolateScope() || element.scope();

  // Act
  $compile(element)($scope);
  $scope.$digest();
  const isolatedScope = getIsolatedScope(element);

  // Assert
  expect(isolatedScope.elements).toBeDefined();
});

В нормальном сценарии это утверждение должно работать:

// Assert
expect(isolatedScope.elements).toBeDefined();

Но я получаю сообщение об ошибке "Ожидается, что не определено". Оказывается, мой isolatedScope не привязан к основному файлу $scope, как и должно быть.

Я пытался заменить метод getIsolatedScope в моих тестах следующим:

const isolatedScope = getIsolatedScope(element["0"].childNodes[0]);

Но я получаю ошибку "element.isolateScope () не является функцией" Пожалуйста, как правильно связать isolatedScope в моих тестах?

...