Модульное тестирование директивы AngularJS (Smart Table)

Я работаю с «Smart Table» и буду использовать их пример плагина, где флажок выбирает строку в таблице: http://lorenzofox3.github.io/smart-table-website/#section-custom

Я пишу модульный тест для этой директивы, код ниже, это не удается. Кто-нибудь написал модульный тест для этого кода или может помочь мне понять, где я ошибаюсь, и действительно ли я проверяю правильную логику?

Директива:

myApp.directive('csSelect', function () {
    return {
        require: '^stTable',
        template: '',
        scope: {
            row: '=csSelect'
        },
        link: function (scope, element, attr, ctrl) {

            element.bind('change', function (evt) {
                scope.$apply(function () {
                    ctrl.select(scope.row, 'multiple');
                });
            });

            scope.$watch('row.isSelected', function (newValue, oldValue) {
                if (newValue === true) {
                    element.parent().addClass('st-selected');
                } else {
                    element.parent().removeClass('st-selected');
                }
            });
        }
    };
});

Модульный тест:

 describe('csSelect',function(){
        var scope, element, attr, ctrl;
       beforeEach(module('myApp.selectorresult'));
             beforeEach(inject(function($rootScope, $compile) {
                elm = angular.element(
                    '<td cs-select="row" class="ng-isolate-scope">' +
                    '<input type="checkbox">' +
                    '</td>');
                scope = $rootScope;
                $compile(elm)(scope);
                scope.$digest();
              }));
       it('should create selectable input',function(){
            console.log(elm.find('input'));
            var checkbox = elm.find('input');
            expect(checkbox.length).toBe(1);
      });
    });

person Pianoc    schedule 16.02.2015    source источник


Ответы (2)


Вам нужно смоделировать stTableController с помощью $controllerProvider, прежде чем настраивать beforeEach(inject...

Ознакомьтесь со спецификацией теста для директивы разбивки на страницы (https://github.com/lorenzofox3/Smart-Table/blob/master/test/spec/stPagination.spec.js), для которого также требуется «stTable». Это хороший пример того, как предоставить 'stTableController' функции, которые вам нужны.

person Austin Knight    schedule 24.04.2015

Для тех, у кого все еще есть эта проблема. Надеюсь, это поможет. Я боролся с этим целую вечность. Я попытался издеваться над stTableController, я попытался добавить файлы поставщика в файлы karma.conf.js среди прочего, но не смог пройти никаких тестов. Казалось, что когда я удаляю require: '^stTable', тесты проходят без проблем, но с ним все тесты проваливаются. Я не мог удалить это, так как это сломало бы мой код.

Итак, в конце концов я обнаружил, что все, что мне нужно было сделать, это добавить st-table к моему элементу в файле spec.js.

Итак, если мой элемент был var element = angular.element('<my-component></my-component');, я должен был сделать его var element = angular.element('<my-component st-table></my-component>');

После этого все тесты проходили.

person mruane    schedule 16.10.2018