Я не понимаю, почему функция ссылки моей директивы никогда не вызывается в тесте Jasmine. Я сделал простой пример.
Вот моя директива (TestDirective.js):
'use strict';
angular.module('comp-one').directive('test',function(){
return{
restrict:'E',
templateUrl:'components/comp-one/html/TestTemplate.html',
scope:true,
link:function(scope){
scope.test='xxx';
}
};
});
А это тестовый пример:
'use strict';
describe('testDirective',function(){
var $compile, $rootScope, element;
beforeEach(module('comp-one'));
beforeEach(module('templates'));
beforeEach(inject(function(_$rootScope_,_$compile_){
$compile = _$compile_;
$rootScope = _$rootScope_;
}));
it('xxx', function(){
var html = '<test></test>';
element = $compile(html)($rootScope);
$rootScope.$digest();
expect( $rootScope.test ).toBe('xxx');
});
});
Тесты не удались, потому что функция ссылки никогда не вызывается, и поэтому переменная xxx не определена. Я ожидал, что функция ссылки будет выполнена "$compile(html)($rootScope);" утверждение. Когда я устанавливаю точку останова в функции ссылки и запускаю приложение (не тест) в браузере, вызывается функция ссылки.
Я запускаю тесты с помощью Karma, который также находит файл, как я вижу в выводе консоли:
Processing "D:/JWS/test/workspace/bla/app/components/comp-one/scripts/TestDirective.js".
Изменить:
Хорошо, я узнал, что тест проходит успешно, когда я установил область действия на false. Но есть ли способ протестировать функцию ссылки с изолированной областью?