Модульное тестирование угловой директивы
Я пытаюсь протестировать все директивы, используя карму и жасмин. Когда я пытаюсь загрузить директиву, которая имеет шаблон с именем header.html
Я получаю следующую ошибку: Error: Unexpected request: GET header.html No more request expected
http://plnkr.co/edit/YTUFXCMdK5JFEwMzzXaR?p=preview
Обновление: у меня есть следующий конфиг в karma.conf.js:
files: [
'test/client/specs/main.js',
// 'WebContent/modules/common/header/**/*.html',
{pattern: 'WebContent/libs/**/*.js', included: false},
{pattern: 'WebContent/modules/**/*.js', included: false},
{pattern: 'WebContent/modules/common/header/tmpl/*.html', included: false},
{pattern: 'test/client/specs/**/*spec.js', included: false}
],
// generate js files from html templates
preprocessors: {
'WebContent/modules/common/header/**/*.html': ['ng-html2js']
},
ngHtml2JsPreprocessor: {
'moduleName': 'Templates',
cacheIdFromPath: function(filepath) {
return filepath.match(/\/WebContent\/modules\/common\/header\/.*\.html/);
}
},
Я пытаюсь загрузить его:
beforeEach(function() {
module("Templates");
});
Теперь я получаю следующие ошибки:
Error: [$injector:modulerr] Failed to instantiate module Templates due to:
Error: [$injector:nomod] Module 'Templates' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
http://errors.angularjs.org/1.2.12/$injector/nomod?p0=Templates
2 ответа
Я решил это в своих модульных тестах, вставив в шаблон $templateCache и затем поместив html в кеш.
http://plnkr.co/edit/btgYfiiRzacS6MfPFlbv?p=preview
Я исследовал несколько разных подходов, и мы решили включить html в директиву.
template: "<div>This is the template</div>"
Это значительно облегчает тестирование, так как вам больше не нужно обновлять templateCache в модульном тесте, что является трудной задачей и подвержено ошибкам, когда в вашей директиве содержится большой кусок html.
Способ Karma - динамически загружать HTML-шаблон в $ templateCache. Вы могли бы просто использовать html2js
препроцессор кармы, как объяснено здесь
Это сводится к добавлению шаблонов *.html к вашим файлам в файле conf.js.
preprocessors = {
'*.html': 'html2js'
};
и использовать
beforeEach(module('..'));
beforeEach(module('...html', '...html'));
в ваш файл JS тестирования