使用templateUrl进行Angular指令测试,无法实例化模块

时间:2014-11-28 18:07:45

标签: angularjs karma-runner karma-jasmine

使用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

我已多次检查所有路径。没有错误。有没有聪明的方法来调试它?

1 个答案:

答案 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没有预料到该请求。