angularjs – 单元测试角度指令templateUrl(包括requirejs和ng-h
我正在研究一个尚未庞大的角应用程序.我遇到了业力单元测试的问题.总而言之,我使用带有requirej的角度.如果我将模板嵌入到我的指令中,我的测试运行良好.但是,由于这个应用程序将是巨大的,它将无法扩展.但是当我移动模板并使用templateUrl在我的指令中加载它时,我无法摆脱以下错误之一(取决于我如何修改conf):
>(初始错误)“意外请求:GET路径/到/ mytpl.html” >当我在我的karma.conf中放置{pattern:’path / to / mytpl.html’,包括:false}并在我的测试文件中添加一个requirejs的定义路径/到/ mytpl.html(这是我想要的方式那工作). >“错误:[$injector:modulerr]由于以下原因,无法实例化模块模板: 注意:我没有在karma.conf中使用FQN,我在这里使用它是一致的.我认为这不重要,但我更倾向于准确 我看到有人把每个’path / to / mytpl.html’:{deps:[‘angular’]}放在他们的test-main.js的shim部分.但它对我不起作用,并且该解决方案不会扩展. 解决方法
我遇到了同样的问题,并在以下
article中找到了解决方案.
我想你的问题是错误的业力或者需要JD配置,特别是基本路径设置. 如果您的指令templateUrl是相对的,并且无法针对karma基本路径或requireJS基本路径正确解析该url,那么您需要解决此问题. 假设您的指令具有templateUrl的’app / directive / myDirective.html’值.然后: >检查你的html文件是否正确包含在karma配置的文件部分中,注意包含:false setting: files: [ //... { pattern: 'path_to_directive/myDirective.html',included: false },//... ], 当然你可以使用像*或**这样的外卡字符,但为了排除故障,我会从一个完整的路径值开始.根据karma配置中basePath的值,’path_to_directive’将与您应用中的路径相同或不同. 例如:如果业力基础路径是你应用根的一级,那么你的’path_to_directive’=’some-folder / app / directive / myDirective.html’ 在做这个测试时要注意: > url中的基本前缀(karma提供来自该虚拟路径的所有文件,并将此前缀添加到所有URL) >在步骤2中获得文件后,您将看到由html2js预处理器创建的实际模块代码.它应该看起来像这样: angular.module('module_path/myDirective.html',[]).run(function($templateCache) { $templateCache.put('module_path/myDirective.html',//... >确保module_path为’app / directive /’.如果没有,那么你有2个选择: > module_path有一些前缀=>只需将以下内容添加到karma配置中即可将其删除: ngHtml2JsPreprocessor:{stripPrefix:’modulePrefix’} ngHtml2JsPreprocessor:{prependPrefix:’missingPart’} 重启业力并确保步骤3中的“module_path”为“app / directive /” shim: { //.. 'requirejs_path/myDirective.html': { deps: ['angular'] },//.. } >确保已将模板作为测试依赖项包含在内,并且不要忘记加载模块: define(['requirejs_path/myDirective.html','angular-mocks','...'],function () { describe('test suite',function() { //... beforeEach(module('app/directive/myDirective.html')); //... }); }); 我希望通过完成这6个步骤,你将得到一个有效的测试.祝好运. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |