使用templateURL对单元测试指令有些问题。我正在使用karma-ng-html2js-preprocessor,我已经阅读了几个关于它的指南。添加了预处理器,stripprefix等几次。因此它应该没有任何错误。
在我的测试中,我添加了这一行,如几个指南中所述:
beforeEach(module('template/input-with-units/input-with-units.html'));
我运行测试时得到的错误是:
Failed to instantiate module template/input-with-units/input-with-units.html
我已多次检查所有路径。没有错误。有没有聪明的方法来调试它?
答案 0 :(得分:0)
我知道这个问题已经过时了,但我会回答它以防其他人偶然发现它。
解决此问题的一种方法是将moduleName
分配给karma.conf.js中ngHtml2JsPreprocessor
对象中的某个唯一字符串,如下所示:
ngHtml2JsPreprocessor: {
// ...
// Other settings here
// ...
moduleName: 'myHtmlTemplates'
}
然后使用
beforeEach(module('myHtmlTemplates'));
然而,听起来你的路径在茉莉花中的解释存在一些问题,所以你可能会在以后遇到其他问题,例如$ templateCache找不到你的模板。如果是这种情况,您可能需要通过调用process.emitWarning(filepath)
内的cacheIdFromPath
(也在ngHtml2JsPreprocessor
中)来调试生成的路径,并根据需要进行修改。
就个人而言,由于我将html文件放在父文件夹下的另一个文件夹中,因此我遇到了生成绝对路径的问题:../frontend/views/**/*.html
,而karma.conf.js
所在的测试文件夹被命名为frontend.tests
。这两个点导致业力创造绝对路径。我通过在karma配置文件中设置basePath : '..'
来解决这个问题。
另外,请注意$templateCache
中的区分大小写。如果您在代码中使用错误的大小写提出GET请求,则无法在$templateCache
中找到它并且它会告诉您$httpBackend
没有预料到该请求。