2016-01-14 2 views
2

Моего karma.conf.js включает в себя:Карма препроцессор не работает

plugins: [ 
    'karma-jasmine', 
    'karma-phantomjs-launcher', 
    'karma-ng-html2js-preprocessor' 
], 
preprocessors: { 
    '../../mypath/*.html': ['ng-html2js'] 
}, 
ngHtml2JsPreprocessor: { 
    moduleName: 'templates' 
}, 

(я пробовал без указания каких-либо плагин, тоже.)

Моих devDependencies включают в себя:

"karma-ng-html2js-preprocessor": "^0.2.0"` 

Мои тесты включают:

beforeEach(module('templates')); 

Они дают ошибку:

Module 'templates' is not available! 

Running карму --log-level debug, я не видят [preprocessor.html2js] записи. (Я получаю Loading plugin karma-ng-html2js-preprocessor.)

Что я делаю неправильно?

ответ

3

Проблема заключалась в том, что шаблоны должны быть указаны под files, а также чтобы шаблон шара в preprocessors должен совпадать. Это подразумевается documentation.

files: [ 
    '../../Scripts/angular-app/directives/*.html', 
    // .js files 
], 

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

Обратите внимание, что **/*.html делает не матч родительских каталогов на basePath.

karma start --log-level debug будет отображать DEBUG [preprocessor.html2js] записей, когда все будет правильно.

Я также смог удалить раздел plugins.

Чтобы получить правильный кэш-ID, я использовал:

ngHtml2JsPreprocessor: { 
    // Load this module in your tests of directives that have a templateUrl. 
    moduleName: 'templates', 

    cacheIdFromPath: function (filepath) { 
     return filepath.substring(filepath.indexOf('/Scripts/angular-app/')); 
    } 
}, 

Если шаблон ссылается на пользовательский фильтр, фильтр должен быть загружен в files и модуль фильтра должен быть загружен в тестах директивы.

+0

Я получаю свои шаблоны. Загрузил и загрузил модуль, но не получил доступ к чему-либо для директив. Мне интересно, что сделал cacheIdFromPath для вас? – Winnemucca

+0

@stevek Я считаю, что цель состоит в том, чтобы преобразовать путь в одно совпадение с 'templateUrl' в директиве. Есть и другие способы сделать это, например 'stripPrefix' - см. Https://github.com/karma-runner/karma-ng-html2js-preprocessor. Вы можете бросить 'console.log (filepath)' in to cacheIdFromPath', чтобы узнать, что вы получаете, и сравнить его с вашим 'templateUrl'. Ваша функция будет отличаться от моей. – TrueWill

+0

Спасибо, это то, над чем я сейчас работаю. У меня есть префикс полосы, и директивы, похоже, следуют этому пути, но когда я console.log путь к файлу, каждый файл шаблонов возвращается к корню всего проекта. Я надеюсь, что это проблема. – Winnemucca

Смежные вопросы