Карма-тестирование визуального отклика пользовательского интерфейса Kendo

Итак, я искал кого-то, кто пытался попробовать то же, что и я, но безуспешно... Итак, начнем. В ответ на сообщение Kendo Lab *Disclaimer*: While Angular Kendo UI is not supported under the formal Kendo UI support agreement, this is an active community project, and we would LOVE for you to open an issue, or fork the repo and submit a pull request. StackOverflow is also a great place to get assistance. У меня нет другого выбора, кроме как прийти на StackOverflow. Вот моя ситуация.

У меня есть угловая настройка кендо в моем веб-приложении, и она работает ОТЛИЧНО! (Немного кривой обучения, но так обстоят дела). Я хочу проверить, что директивы, которые я написал, работают правильно, и мне бы хотелось иметь возможность протестировать директивы кендо, которые я ищу.

Теперь для кода

изменить размер-directive.js

app.directive("ibsResizeGraphDirective", ['$window', function ($window) {
    return function (scope, element) {

        //Bind to window resize so that we can have the elements respond.
        //There is no element.resize event and watching for width change doesn't work
        angular.element($window).bind('resize', function () {
            scope.$apply();
        });

        //Watch for element.width() change
        scope.$watch(function () {
            return $(element).width();
        }, function (newValue, oldValue) {
            if (newValue != oldValue) {    
                scope.graph.options.chartArea.width = $(element).width();

                // Turn off transitions so that the graphs don't redraw everytime the window changes
                if (oldValue != 0 && scope.graph.options.transitions) {
                    scope.graph.options.transitions = false;

                }

                scope.graph.refresh();
            }
        })

      //...

    };
}]);

как вы можете видеть, я пытаюсь в основном проверить размер элемента диаграммы и соответствующим образом установить chartArea.width.

Самая большая проблема, с которой я сталкиваюсь, это заставить график даже появиться. Чтобы упростить задачу с нашей стороны, мы решили заключить объявление диаграммы в директиву!

диаграмма.js

app.directive('ibsChart', [ "ibsMainService", function (ibsMainService) {
    return {
        // Restrict E for element
        restrict: 'E',
        // Here we setup the template for the code we want to replace our directive
        template:"<div ibs-resize-graph-directive \n\
                       ibs-owner-warehouse-listener-directive \n\
                       ibs-graph-culture-caption \n\
                       kendo-chart='graph' \n\
                       k-options='chartOptions' \n\
                       k-data-source='dataSource' \n\
                       class='col-lg-4'/>",
        replace: true,
        scope: { 
            //...
        },
        controller: function($scope){
            //...
        },
        link: function (scope, element, attrs) {
            //...
    };
}]);

и, наконец, мои тесты... в которых я даже не могу правильно отобразить свою диаграмму... так как же я должен проверить, изменилась ли ширина?!

изменить размер-test.js

//Setup items before each test
    beforeEach(module('dynamanMain', 'kendo.directives'));

    //Initialization Tests
    it('should render the chart', angular.mock.inject(function ($compile, $rootScope, $timeout) {
        var scope = $rootScope.$new();
        ele = $compile('<ibs-chart-directive></ibs-chart-directive>')(scope);
        scope.$apply();
        //$timeout.flush();
        //Test that the kendo grid was created over the div element
        console.log(ele.find('div')); //This basically outputs nothing

    }));

А вот скрин результата Test Debug Results

  1. Диаграмма не отображается (я знаю, что это потому, что я не добавляю ее к телу)
  2. После моих скриптов в теле нет элемента (который при выполнении angular-kendo тесты они появляются)
  3. Я получаю прототип, возвращенный из моего element.find('div')

Это определенно более длинный пост, но я хотел быть как можно более тщательным, чтобы получить хороший ответ. У кого-нибудь есть мысли?


person Nolic0321    schedule 25.04.2014    source источник
comment
все еще читаю и думаю... но пробовали ли вы глубокие $watch? $watch(itemToWatch,listener,true) // последний параметр   -  person nilsK    schedule 25.04.2014
comment
Я пробовал это без везения в получении части изменения размера. Это совсем другая проблема, над которой я сейчас работал. Если вы имеете в виду добавление часов к тесту, то я не уверен, что это даст .... Я даже не могу заставить диаграмму правильно отображать, чтобы иметь возможность проверить / посмотреть, изменился ли размер элемента. На самом деле мне удалось заставить директиву работать, если я издевался над объектом scope.graph... но на самом деле это не проверяет, правильно ли Кендо реагирует на изменение размера... только то, что делает объект scope.graph.   -  person Nolic0321    schedule 25.04.2014
comment
В настоящее время я пытаюсь сделать то же самое, что и вы, на приборной панели с четырьмя диаграммами, и ваш пост мне помог. Он работает хорошо, но всегда выдает Unable to get wrapper of undefined или null reference. Я предполагаю, что это связано с тем, что диаграммы уничтожаются до того, как код завершит работу со ссылкой, но я застрял. Любая помощь будет высоко оценена... ура   -  person hally9k    schedule 15.01.2015


Ответы (1)


Я болван. Я неправильно ориентировался на директиву.

 ele = $compile('<ibs-chart-directive></ibs-chart-directive>')(scope);

должно быть

 ele = $compile('<ibs-chart></ibs-chart>')(scope);

потому что моя директива определена как

app.directive('ibsChart', [ "ibsMainService", function (ibsMainService) {

в результате внесения этих изменений я также смог завершить тест и проверить ширину диаграммы и то, вызывалась ли функция изменения размера .... Я ЛЮБЛЮ находить такие мелочи после поиска в течение нескольких дней ... ..

person Nolic0321    schedule 28.04.2014