2016-09-27 1 views
0

Я пишу тест для директивы, называемой календарной неделей, и получаю следующую угловую ошибку: https://docs.angularjs.org/error/ $ sce/insecurl? P0 = http:% 2F% 2Fhere. ком% 2Fviews% 2Fdirectives% 2FcalendarWeek.html

Моя спецификация имеет

describe('Tests for CalendarWeek Directive', function(){ 
    var el, scope, controller; 

    beforeEach(function() { 
    module('MyApp'); 
    return inject(function($injector, $compile, $rootScope, $httpBackend, $sce) { 
     el = angular.element("<div calendar-week></div>"); 
     $compile(el)($rootScope.$new()); 
     $rootScope.$digest(); 
     controller = el.controller("calendarWeek"); 
     $sce.trustAsResourceUrl("http://here.com/views/directives/calendarWeek.html") 
     $httpBackend.whenGET("http://here.com/views/directives/calendarWeek.html").respond({ hello: 'World' }); 

есть ли что-то я не хватает?

+0

почему во время тестирования директивы вы проверить запрос сервера? директива должна только манипулировать DOM, и это то, что нужно проверить. ресурсы, запрашивающие данные с сервера, должны быть протестированы отдельно. –

+0

Если вы перейдете по ссылке в сообщении об ошибке, вы увидите, что именно вам не хватает: обработка ресурса из ненадежного источника заблокирована. Угловой блокирует вас от загрузки небезопасного ресурса: https://docs.angularjs.org/api/ng/service/$sce –

ответ

0

От Angular docs: По умолчанию Угловая только загружает шаблоны из того же домена и протокола, что и документ приложения. Это делается путем вызова $ sce.getTrustedResourceUrl в URL шаблона. Чтобы загрузить шаблоны из других доменов и/или протоколов, вы можете либо перечислить их в белый список, либо перевести их в доверенное значение.

Вы пытаетесь загрузить ресурс либо из другого домена, либо из другого протокола. Я думаю, что вам нужно оборачивать ваш URL, как это:

$httpBackend.whenGET($sce.trustAsResourceUrl("http://here.com/views/directives/calendarWeek.html")).respond({ hello: 'World' }); 

Или белый список так:

angular.module('myApp', []).config(function($sceDelegateProvider) { 
    $sceDelegateProvider.resourceUrlWhitelist([ 
    // Allow same origin resource loads. 
    'self', 
    // Allow loading from our assets domain. 
    'http://here.com/views/directives/calendarWeek.html' 
    ]); 

}); 
Смежные вопросы