Как указано в заголовке вопроса, я получаю неопределенность при вызове isolateScope()
. Я попытался выполнить модульное тестирование своей директивы Angular на основе инструкций, приведенных в модульном тестировании директив AngularJS с Внешние шаблоны.
Вот мой код:
directive.js
angular.module("myTestApp")
.directive("testDirective", function(){
return{
restrict: "E",
require: "ngModel",
scope:{
ngModel: "=",
label: "@?"
},
templateUrl: "/mypath/templates/testDirective.html",
link: function($scope, element, attributes, ngModelCtrl){
$scope.functions = {},
$scope.settings = {
label: $scope.label ? $scope.label : ""
}
}
};
});
Я использовал karma-ng-html2js-preprocessor
для templateUrl.
karma.conf.js (Код содержит только те части, которые связаны с ng-html2js)
files:[
//All Js files concerning directives are also included here...
'/mypath/templates/*.html'
],
preprocessors: {
'/mypath/templates/*.html': [ng-html2js']
},
ngHtml2JsPreprocessor: {
moduleName: 'template'
},
plugins: ['karma-*'],
directiveSpec.js
describe("testDirective Test", function(){
var scope, $compile,$httpBackend, template;
beforeEach(module('myTestApp'));
beforeEach(module('template'));
beforeEach(inject(function($rootScope, _$compile_, _$httpBackend_){
scope = $rootScope.$new();
$compile = _$compile_;
$httpBackend = _$httpBackend_;
}));
it("should check if the value of label attribute id set to dummyLabel", function(){
$httpBackend.expect('GET','/mypath/templates/testDirective.html').respond();
scope.label = 'dummyLabel';
var element = angular.element('<test-directive label= "label" ></test-directive>');
element = $compile(element)(scope);
console.log(element);
scope.$digest();
console.log('Isolate scope: '+ element.isolateScope());
expect(element.isolateScope().label).toEqual('dummyLabel');
});
});
Здесь console.log(element);
печатает {0: <test-directive label="label" class="ng-scope"></test-directive>, length: 1}
Проблема: console.log('Isolate scope: '+ element.isolateScope());
дает undefined
.
Я просмотрел эту проблему по многим вопросам в StackOverflow, но не смог найти правильного решения.
Кроме того, я должен использовать $httpBackend
для получения html-файла, иначе он выдает ошибку Unexpected Request
.
Я был бы очень благодарен за любую помощь, так как я застрял в этой ошибке с прошлой недели!