使用Jasmine与AngularJS时出错
我使用jasmin用以下代码测试我的AngularJs项目
controllersSpec.js describe('myApp',function(){ beforeEach(angular.mock.module('myApp')); it('should have a mailctrl',function() { expect(myApp.mailctrl).toBeDefined(); }); }); controller.js var myApp = angular.module('myApp',[]); myApp.controller('mailctrl',['$scope','$routeParams','$rootScope','getMailData','$angularCacheFactory',function ($scope,$routeParams,$rootScope,getMailData,$angularCacheFactory) { ##....controller content....## } ]); SpecRunner.html < script type =“text / javascript”src =“../ lib / angular / angular.min.js”>< / script> 现在,当我在浏览器中打开Specrunner.html时,我收到了以下错误 编辑: describe('myApp',function(){ beforeEach(angular.mock.module('myApp')); it('should have a mailctrl',inject(function($rootScope,$controller) { var controller = $controller('mailctrl',{ $scope: $rootScope.$new(),$rootScope: $rootScope }); expect(controller).toBeDefined(); })); 并得到以下错误 – 解决方法
1)您尝试将控制器作为模块上的字段访问时出错.在您的测试中,您应该在测试中注入
$controller 来创建控制器.这意味着您应该编写如下测试:
it('should have a mailctrl',$controller) { var controller = $controller('mainctrl',$rootScope: $rootScope,... }) // rest of your dependencies expect(controller).toBeDefined(); })); 2)见1 3)angular.mock.module用于在测试中将模块注册到进样器.它与模块是一回事. angular.module用于为您的应用程序创建,注册或检索模块. 关于你的编辑: 您没有提供routeParams和您的控制器所依赖的任何其他服务,因此$injector不知道从哪里获取它们并且抛出此错误. $injector必须知道控制器所需的每个参数要注入的内容.你的控制器取决于 > $rootScope:由angular提供 所以最后你应该像这样创建你的控制器: it('should have a mailctrl',{ $scope: $rootScope.$new(),'$routeParams': {},// whatever it needs to be to be able to test your controller $rootScope: $rootScope,'getMailData': getMailDataMOCK // this object is created by you in your test code '$angularCacheFactory': $angularCacheFactoryMOCK }) expect(controller).toBeDefined(); })); 如果你没有提供任何这些参数,那么它将尝试从$injector获取它并在未找到时抛出异常. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |