当前位置:  开发笔记 > 程序员 > 正文

Angular JS Test驱动开发,具有多个控制器

如何解决《AngularJSTest驱动开发,具有多个控制器》经验,为你挑选了1个好方法。

我使用Angular JS开发了一个Web应用程序.我在使用TTD方法时需要实现的额外CR很少.我们使用Jasmine和Karma返回单元测试用例.我们目前面临的挑战是当我们尝试为多个控制器编写单元测试用例时.我在Home Controller上有一个主页返回,它在另一个控制器中有一个广播事件.当我为具有该广播事件的控制器编写单元测试用例对象时,未初始化.

有没有办法将第二个控制器作为依赖对象注入.答案与参考样本链接或演示代码非常感谢.



1> Leblanc Mene..:

你说你正在使用Jasmine和Karma,所以我假设你是单元测试.如果您是"单元"测试,则应在模拟,间谍,所有注入服务时单独测试每个控制器.

    beforeEach(inject(function ($rootScope, $controller) {
        rootScope = $rootScope;
        scope = $rootScope.$new();
        controller = $controller('MyCtrl as ctrl', {
            '$scope': scope
        });            
    }));

    it('', function(){

     //Arrange
     controller.counter = 0; // Your controller is listening on scope.$on to update this counter.

     //Act
     rootScope.$broadcast('xyz', {});

     //Assert
     expect(controller.counter == 1).toBe(true);
     rootScope.$broadcast('xyz', {});
     expect(controller.counter == 2).toBe(true);
     rootScope.$broadcast('xyz', {});
     expect(controller.counter == 3).toBe(true);
    });

广播要小心.只有域事件(模型更新/删除/创建)或全局(登录,注销)应该通过$广播传播.否则,应该用service +指令替换它.一个例子是角度材料https://material.angularjs.org/latest/api/service/ $ mdDialog,这是一个带有支持服务的指令,可以从任何地方打开/关闭.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有