加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 单元测试角度指令templateUrl(包括requirejs和ng-h

发布时间:2020-12-17 06:47:19 所属栏目:安全 来源:网络整理
导读:我正在研究一个尚未庞大的角应用程序.我遇到了业力单元测试的问题.总而言之,我使用带有requirej的角度.如果我将模板嵌入到我的指令中,我的测试运行良好.但是,由于这个应用程序将是巨大的,它将无法扩展.但是当我移动模板并使用templateUrl在我的指令中加载它
我正在研究一个尚未庞大的角应用程序.我遇到了业力单元测试的问题.总而言之,我使用带有requirej的角度.如果我将模板嵌入到我的指令中,我的测试运行良好.但是,由于这个应用程序将是巨大的,它将无法扩展.但是当我移动模板并使用templateUrl在我的指令中加载它时,我无法摆脱以下错误之一(取决于我如何修改conf):

>(初始错误)“意外请求:GET路径/到/ mytpl.html”
>“ReferenceError:找不到变量:angular”.使用不同的配置会发生此错误:

>当我在我的karma.conf中放置{pattern:’path / to / mytpl.html’,包括:false}并在我的测试文件中添加一个requirejs的定义路径/到/ mytpl.html(这是我想要的方式那工作).
>当我将path / to / mytpl.html放入我的karma.conf时,我的所有模板都会返回此错误(无论我是否使用ng-html2-js预处理器).

>“错误:[$injector:modulerr]由于以下原因,无法实例化模块模板:
错误:[$injector:nomod]模块“模板”不可用!“.我看到karma-ng-html2js-preprocessor可用于创建一个包含所有模板的模块,但它从未起作用.

注意:我没有在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’
>确保您可以从浏览器获取文件.转到http://localhost:karma_port/base/path_to_directive/myDirective.html.js

在做这个测试时要注意:

> url中的基本前缀(karma提供来自该虚拟路径的所有文件,并将此前缀添加到所有URL)
>你网址末尾的’.js’

>在步骤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’}
> module_path更短=>添加缺失的部分:

ngHtml2JsPreprocessor:{prependPrefix:’missingPart’}

重启业力并确保步骤3中的“module_path”为“app / directive /”
>确保为模板模块添加了角度依赖性(检查test-main.js,它基本上是requireJS的配置文件).另请注意,shim部分中的值将根据test-main.js文件中的baseUrl值进行解析.为简单起见,我假设requireJS可以从’requirejs_path / myDirective.html’路径获取文件.

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个步骤,你将得到一个有效的测试.祝好运.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读