gpt4 book ai didi

angularjs - 具有多个 Controller 的 Angular JS 测试驱动开发

转载 作者:行者123 更新时间:2023-12-04 03:36:44 24 4
gpt4 key购买 nike

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

有没有办法将第二个 Controller 作为依赖对象注入(inject)。非常感谢带有引用示例链接或演示代码的答案。

最佳答案

你说你正在使用 Jasmine 和 Karma,所以我假设你是单元测试。如果你是“单元”测试,你应该在模拟、监视所有注入(inject)的服务时单独测试每个 Controller 。

    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);
});

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

关于angularjs - 具有多个 Controller 的 Angular JS 测试驱动开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34742468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com