我使用Angular JS开发了一个Web应用程序.我在使用TTD方法时需要实现的额外CR很少.我们使用Jasmine和Karma返回单元测试用例.我们目前面临的挑战是当我们尝试为多个控制器编写单元测试用例时.我在Home Controller上有一个主页返回,它在另一个控制器中有一个广播事件.当我为具有该广播事件的控制器编写单元测试用例对象时,未初始化.
有没有办法将第二个控制器作为依赖对象注入.答案与参考样本链接或演示代码非常感谢.
你说你正在使用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,这是一个带有支持服务的指令,可以从任何地方打开/关闭.