如何在不使用特定于Jasmine的inject()的情况下将依赖项注入Angul
发布时间:2020-12-13 20:09:57 所属栏目:百科 来源:网络整理
导读:我试图将我的大脑包裹在AngularJS中的依赖注入中.让我们说这是我非常激动人心的应用程序代码: function PrideRockCtrl($scope,King) { $scope.king = King;}angular.module('Characters',['ngResource']) .factory('King',function() { return "Mufasa"; })
我试图将我的大脑包裹在AngularJS中的依赖注入中.让我们说这是我非常激动人心的应用程序代码:
function PrideRockCtrl($scope,King) { $scope.king = King; } angular.module('Characters',['ngResource']) .factory('King',function() { return "Mufasa"; }); 我想测试PrideRockCtrl.如果我按照文档和教程中的示例进行操作,我可以使用模块(‘Characters’)配置注入器并使用inject()来获取一些依赖项.即: describe('Pride Rock',function() { beforeEach(module('Characters')); it('should be ruled by Simba',inject(function($rootScope,$controller) { var scope = $rootScope.$new(); var ctrl = $controller(PrideRockCtrl,{$scope: scope}); expect(scope.king).toEqual("Mufasa"); })); }); 这很好,但这不是一个交叉测试框架解决方案. module()和inject()测试助手只与Jasmine兼容. 在不使用module()或inject()的情况下手动完成相同依赖注入的最佳方法是什么? 我想出了这个: describe('Pride Rock',function() { it('should be ruled by Mufasa',function() { var $injector = angular.injector(['Characters']); var $controller = $injector.get('$controller'); var scope = $injector.get('$rootScope').$new(); var king = $injector.get('King'); var ctrl = $controller(PrideRockCtrl,{$scope: scope,King: king}); expect(scope.king).toEqual("Mufasa"); }); }); 这看起来非常冗长.有没有更好的办法? jsFiddle:http://jsfiddle.net/johnlindquist/d63Y3/
最简单的版本,不使用模块将如下所示:
describe('Pride Rock',function() { it('should be ruled by Simba',$controller) { var scope = $rootScope.$new(); var ctrl = $controller(PrideRockCtrl,{ $scope: scope,King:"Mufasa" }); expect(scope.king).toEqual("Mufasa"); })); }); 事实上,你的尝试非常接近,唯一缺少的是控制器中的本地依赖(King:“Mufasa”). 在那些测试中,我们专注于一个选定的类,只是没有必要使用$injector,因为我们可以手动模拟/存根我们的依赖项.在一天结束时,$injector只是给出了对象的实例,所以我们也可以创建自己的对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |