angularjs - не в состоянии правильно проверить директиву

0

Я пишу некоторые директивные тесты, но с этим у меня возникают некоторые проблемы, потому что вся директива в основном создается через плагин jquery.

Вот код директивы:

var setColor;

setColor = function(value) {
  var el, temperatureValue;
  el = $('.rs-range-color');
  temperatureValue = parseInt(value);
  el.attr('class', '');
  return el.addClass('rs-path rs-transition rs-range-color animate-color-change temp-' + temperatureValue);
};

$.fn.roundSlider.prototype.defaults.create = function() {
  var endLabel, numberTag1, numberTag2, o, startLabel;
  o = this.options;
  startLabel = this._valueToAngle(o.min);
  numberTag1 = this._addSeperator(startLabel, 'rs-tooltip-text custom-label num1 ');
  numberTag1.children().html(o.min).rsRotate(-startLabel);
  endLabel = this._valueToAngle(o.max);
  numberTag2 = this._addSeperator(endLabel, 'rs-tooltip-text custom-label num2 ');
  numberTag2.children().html(o.max).rsRotate(-endLabel);
  return setColor(o.value);
};

angular.module('Picker', []).directive('TemperaturePicker', function() {
  return {
    restrict: 'E',
    templateUrl: './directives/Picker/temperaturePicker.tpl.html',
    replace: true,
    link: function(scope, element, attrs) {
      element.roundSlider({
        min: attrs.min,
        max: attrs.max,
        radius: attrs.size,
        sliderType: 'min-range',
        startAngle: 315,
        circleShape: 'pie',
        width: 20,
        value: attrs.value,
        step: 0.5,
        editableTooltip: true,
        tooltipFormat: function(attrs) {
          return attrs.value.toFixed(1) + ' °C';
        }
      });
      return element.on('change drag', function(e) {
        if (e.value !== void 0) {
          return scope.$apply(function() {
            return setColor(e.value);
          });
        }
      });
    }
  };
});

и вот тест, который я написал (если не удается, потому что он говорит, что element.roundSlider не является функцией):

describe('Directive: temperaturePicker', function() {
  var $compile, $rootScope;
  $rootScope = void 0;
  $compile = void 0;
  beforeEach(module('hgApp'));
  beforeEach(inject(function(_$rootScope_, _$compile_) {
    $compile = _$compile_;
    return $rootScope = _$rootScope_;
  }));
  return it('Should check that the directive is created', function() {
    var el;
    el = $compile("<temperature-picker></temperature-picker>")($rootScope);
    $rootScope.$digest();
    return expect(el).toBeDefined();
  });
});

он не работает сразу после $rootScope.$digest().

Плагин Roundslider определенно вызывается при запуске теста, как вы можете видеть в консоли отладки кармы:

22 04 2016 10: 58: 27.679: DEBUG [промежуточное ПО: исходные файлы]: запрос /base/www-dev/js/roundSlider.min.js?44e96bb2359ffbafdb07fe8d60e7f95775e6d5ec

22 04 2016 10: 58: 27.679: DEBUG [промежуточное ПО: исходные файлы]: выборка C: /src/app-v5/www-dev/js/roundSlider.min.js 22 04 2016

10: 58: 27.679: DEBUG [веб-сервер]: обслуживает (кэширует): C: /src/app-v5/www-dev/js/roundSlider.min.js

Любая помощь будет действительно оценена. благодаря

Теги:
karma-jasmine
angularjs-directive

1 ответ

0
Лучший ответ

Я считаю, что вы хотите выбрать element из DOM с помощью jQuery, поэтому ваша функция ссылок будет выглядеть так:

link: function(scope, element, attrs) {
  $(element).roundSlider({ .......

Ещё вопросы

Сообщество Overcoder
Наверх
Меню