我已经开发了使用Angular JS的Web应用程序.我在使用TTD方法时需要实现更多的CR.我们使用茉莉花和羯磨返回单元测试用例.我们面临的挑战是当我们尝试为多个控制器编写单元测试用例时.我有一个主页返回家庭控制器&它在另一个控制器中有一个广播事件.当我写一个单元测试用例对于具有该广播事件的控制器的对象未被初始化.
你说你正在使用茉莉和羯磨,所以我假设你是单元测试.如果您是“单位”测试,您应该单独测试每个控制器,同时嘲笑,间谍,所有注入的服务.
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); });
只要小心广播.只有域名活动(模型更新/删除/创建)或全局(登录,注销)应该超过$广播.否则,它应该被替换为一个服务指令.一个例子是角材料https://material.angularjs.org/latest/api/service/ $mdDialog,它是一个带有后备服务的指令,可以在任何地方打开/关闭.