Я пытаюсь проверить директиву, где у меня есть раздел кода, который соблюдает атрибут:
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?
});
В общем, я предпочитаю давать обработчику изменения имя (сделать его членом директивы или, лучше всего, поставить всю эту логику во встроенный контроллер), а затем вызвать его непосредственно в вашем тесте. В противном случае вы тестируете угловую инфраструктуру, которая ничего не принесет вам. Модульные тесты должны доверять тому, что структура работает (почему мы используем mocks) и тестируем ваш собственный код. Функциональное и интеграционное тестирование покажет вам, правильно ли вы настроили структуру.
хорошо, это другое: вы должны добавить атрибут в директиву:
var html = '<my-directive myattr=""></my-directive>';