2014-11-28 3 views
1

Получил некоторые проблемы с модульным тестированием директивы с шаблономURL. Я использую karma-ng-html2js-препроцессор, и я прочитал несколько руководств об этом. Добавлены preproccsors, stripprefix и т. Д. Прошли несколько раз, поэтому не должно быть никаких ошибок.Угловой директивный тест с шаблономUrl, Не удалось создать экземпляр модуля

В моем тесте я добавить эту строку, как написано в нескольких руководствах:

beforeEach(module('template/input-with-units/input-with-units.html')); 

Я получаю ошибку, когда я запускаю тест:

Failed to instantiate module template/input-with-units/input-with-units.html 

Я проверил все пути несколько раз. Нет ничего плохого. Есть ли какой-нибудь умный способ отладить это?

+0

Я точно знаю, что функция 'module()' принимает только имена определенных ** модулей **, а не 'templateUrl'. Какой бы ни был гид, который вы читаете, это определенно неверно. – ryeballar

+0

@ryeballar karma-ng-html2js-preprocessor конвертировать html-файлы в строки js и генерировать угловой модуль. – Per

ответ

0

Я знаю, что этот вопрос старый, но я отвечу на него, если кто-то наткнется на него.

Одним из способов решения этой проблемы является присвоение moduleName некоторой уникальной строки в ngHtml2JsPreprocessor объекта в karma.conf.js следующим образом:

ngHtml2JsPreprocessor: { 
    // ... 
    // Other settings here 
    // ... 
    moduleName: 'myHtmlTemplates' 
} 

, а затем использовать

beforeEach(module('myHtmlTemplates')); 

Однако, похоже, что есть некоторая проблема с тем, как ваши пути интерпретируются в жасмине, поэтому вы можете столкнуться с другими проблемами позже, например, $ templateCache, не находя ваши шаблоны. Если это так, вы можете отлаживать созданные пути, вызывая process.emitWarning(filepath) внутри cacheIdFromPath (также в ngHtml2JsPreprocessor) и изменять их по своему усмотрению.

Лично у меня были проблемы с абсолютными путями производится, потому что я кладу HTML-файлы в другую папку под родительской папки, как таковой: ../frontend/views/**/*.html, в то время как моей тестовой папке, где karma.conf.js было место под названием frontend.tests. Две точки заставили карму создать абсолютные пути. Я решил это, установив basePath : '..' в файле конфигурации кармы.

Кроме того, будьте осторожны с чувствительностью к регистру в $templateCache. Если вы сделаете запрос GET с неправильным кодом в своем коде, вы не сможете найти его в $templateCache, и он скажет вам, что $httpBackend не ожидал этого запроса.