1

Я настраиваю единичный тест для угловой директивы с кармой, и я застрял в настройке препроцессора ngHtml2JsPreprocessor. Я попробовал кучу разных способов, как описано в различных потоках в Stack Owerflow, чтобы настроить тесты, но я стараюсь найти способ, который работает для меня.Директива по определению угловой кармы Ошибка: Неожиданный запрос: GET

karma.conf.js

files: [ 
     'bower_components/angular/angular.js', 
     .. 
     .. 
     .. 
     'test/mock/*.js', 
     'test/mock/**/*.js', 
     'test/spec/unit/**/*.js', 
     'app/views/*.html', 
     'app/views/**/*.html' 
     //'app/views/**/**/*.html' 
    ], 

    preprocessors: { 
     //'app/views/**/**/*.html': ['ng-html2js'] 
     'app/views/**/*.html': ['ng-html2js'] 
    }, 

    ngHtml2JsPreprocessor: { 
     // strip this from the file path 
     stripPrefix: 'app/', 
     moduleName: 'PreprocessedTemplates' 
    }, 

тестовый файл

beforeEach(inject(function ($compile, $rootScope, $templateCache, $httpBackend) { 
     scope = $rootScope; 
     //$templateCache.put('/app/views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html', $templateCache.get('/app/views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html')); 
     //$templateCache.put('../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html', $templateCache.get('../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html')); 

     ele = angular.element(
      '<konstrukt-std-filterbox title="Testing generic filter Component" items="list" source="data" filter-entity="Dim1"></konstrukt-std-filterbox>' 
     ); 

     mockupDataFactory = konstruktMockupData.getInstance(); 

     //these variables are needed. 
     scope.data = mockupDataFactory.pivotedData; 
     scope.list = ["first","second"]; 

     scope.$apply(); 

    })); 

Он терпит неудачу в перед каждым сообщением.

Error: Unexpected request: GET ../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html

Путь к шаблону является

app\views\components\KonstruktStdFilterbox\KonstruktStdFilterbox.html

Я понимаю, что тест не может найти шаблон в templatecache, но как я могу настроить карму, чтобы иметь PreprocessedTemplates загрузить мой шаблон? Я пробовал различные конфигурации в моем karma.conf.js, см. Прокомментированные строки выше.

ответ

2

Оказалось, что у меня был путь, определенный в моей директиве, которая была очень трудно найти, отсюда и ошибка

Error: Unexpected request: GET ../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html

angular.module('app').directive('directive', function(utilities) { 
    return { 
     restrict: 'E', //element 
     templateUrl: '../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html', 
     scope: true, 
     replace: true, 

..

И когда я изменил templateUrl к этому тест прошел отлично!

templateUrl: 'views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html

+0

Удивительный, рад, что нашел это и спасибо за публикацию этого решения. У меня была такая же проблема, но оказалось, что я забыл поместить параметр stripPrefix в параметр ngHtml2JsPreprocessor, чтобы избавиться от «app /», чтобы он соответствовал пути шаблона templateUrl моей директивы. Я думаю, было бы полезно, если бы в документации указано, что путь, используемый в 'templateUrl', должен соответствовать пути, который загружает карма. – MikeDev

+0

рад, что я мог бы помочь. Похоже, что многие люди борются с этим, поэтому да, безусловно, есть место для улучшения в документации по конфигам кармы. – JohanLarsson