AngularJS Карма - Как вызвать директиву attr. $ Наблюдать в тестах?

0

Я пытаюсь проверить директиву, где у меня есть раздел кода, который соблюдает атрибут:

    function linkFn(scope, element, attrs) {

        attrs.$observe('myattr', function() {
            console.log('do something');

У меня есть тест, который делает это:

var html = '<my-directive></my-directive>';
var scope;
var element;

beforeEach(module('app', function($provide) {}));
beforeEach(inject(function($injector, $compile, $rootScope) {
    scope = $rootScope.$new();
    element = $compile(angular.element(html))(scope);
}));

describe('after being compiled', function() {

    it('my test', function () {
        element[0].setAttribute('myattr', 'hello');
        console.log(element); // shows that myattr is set properly
        scope.$digest();
        // the console.log is not triggered, why?
    });
Теги:
karma-runner

2 ответа

0

В общем, я предпочитаю давать обработчику изменения имя (сделать его членом директивы или, лучше всего, поставить всю эту логику во встроенный контроллер), а затем вызвать его непосредственно в вашем тесте. В противном случае вы тестируете угловую инфраструктуру, которая ничего не принесет вам. Модульные тесты должны доверять тому, что структура работает (почему мы используем mocks) и тестируем ваш собственный код. Функциональное и интеграционное тестирование покажет вам, правильно ли вы настроили структуру.

0

хорошо, это другое: вы должны добавить атрибут в директиву:

var html = '<my-directive myattr=""></my-directive>';

http://plnkr.co/edit/I2nngQtEUyxBbcGrdtTJ?p=preview

  • 0
    к сожалению, это не работает. Я имею в виду сделать $ digest, который в любом случае вызвал бы $ apply, но все еще пробовал $ apply самостоятельно, и не повезло.
  • 0
    Я отредактировал свой ответ
Показать ещё 3 комментария

Ещё вопросы

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