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

AngularJS如何进行单元测试以确保指令像ng-click指向有效代码

发布时间:2020-12-17 07:00:22 所属栏目:安全 来源:网络整理
导读:我正在使用Jasmine为我们的控制器编写单元测试,但希望得到社区对如何处理这种情况的反
我正在使用Jasmine为我们的控制器编写单元测试,但希望得到社区对如何处理这种情况的反馈……

我有一个控制器 – InvoiceController,像这样:

angular.module('myModule').controller('myController',['$scope',function($scope) {
        $scope.doSomething = function() {
            $scope.something = 'bar';
        };
    }
]});

在我的单元测试中,我验证我的控制器具有预期的方法:

it('should be able to do some work',function() {

    // initialize scope properties
    scope.someProperty = 'foo';

    // load controller using those properties
    injectController();

    // do I have all of the functions necessary to do this work?
    expect(typeof (scope.doSomething)).toBe('function');

    // now execute test
    scope.doSomething();
    expect(scope.something).toBe('bar');       

}

最后,在我的html中,我有一个带有ng-click的元素,如下所示:

<button ng-click="doSomehing()">Do Something</button>

看起来不错吧?但是,有没有人抓住我做错了什么?

我的ng-click方法拼写错误,但所有测试都是绿色的,生活似乎很美好……直到我尝试点击那个人并且没有任何反应.没有渲染时错误,点击没有错误.嗯.

好几次,因为我正在重构代码,这让我感到满意.我在单元测试和控制器中重命名doSomething toDoomeCooler但在html中错过了一个地方.经过一分钟的刮擦后,我发现错过了什么.

我喜欢一种确保标记有效的方法. E2E测试似乎是一个明显的解决方案,但那些容易出现脆弱性,因此我们希望有一些替代方案.

如果这是ASP.Net,我会从代码后面附加click事件,这样我就会得到编译时错误和运行时错误.

思考?

萨德

解决方法

你可以做的一件事是获取模板文本并在其上运行$compile.然后将其链接到控制器的范围.然后你可以做类似dom.find(‘[ng-click]’).click();,如果你的控制器范围中没有定义它们,它们应该抛出.这与您通常测试指令的方式类似.

(编辑:李大同)

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

    推荐文章
      热点阅读