大佬教程收集整理的这篇文章主要介绍了单元测试AngularJS控制器,它通过$controller从基本控制器继承,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
angular.module('my-module',[]) .controller('BaseCtrl',function ($scope,frobnicatE) { console.log('BaseCtrl instantiated'); $scope.foo = frobnicate(); // do a bunch of stuff }) .controller('ChildCtrl',function ($controller,$scopE) { $controller('BaseCtrl',{ $scope: $scope,frobnicate: function () { return 123; } }); });
假设BaseCtrl做了很多东西并且已经经过充分测试,我想测试ChildCtrl用某些参数实例化BaseCtrl.我最初的想法是这样的:
describe("ChildCtrl",function () { var BaseCtrl; beforeEach(module('my-module')); beforeEach(module(function($providE) { BaseCtrl = jasmine.createSpy(); $provide.value('BaseCtrl',BaseCtrl); })); it("inherits from BaseCtrl",inject(function ($controller,$rootScopE) { $controller('ChildCtrl',{ $scope: $rootScope.$new() }); expect(BaseCtrl).toHaveBeenCalled(); })); });
但是,当我运行测试时,间谍永远不会被调用,控制台显示“BaseCtrl instantiated”,表明$controller正在使用实际的控制器而不是我提供的$provide.value()实例.
测试这个的最佳方法是什么?
更新的测试代码如下所示:
describe("ChildCtrl",function () { var BaseCtrl; beforeEach(module('my-module',function ($controllerProvider) { BaseCtrl = jasmine.createSpy(); BaseCtrl.$inject = ['$scope','frobnicate']; $controllerProvider.register('BaseCtrl',BaseCtrl); })); beforeEach(inject(function ($controller,{ $scope: $rootScope.$new() }); })); it("inherits from BaseCtrl",$rootScopE) { expect(BaseCtrl).toHaveBeenCalled(); })); it("passes frobnicate() function to BaseCtrl that returns 123",function () { var args = BaseCtrl.calls.argsFor(0); var frobnicate = args[1]; expect(frobnicate()).toEqual(123); }); });
以上是大佬教程为你收集整理的单元测试AngularJS控制器,它通过$controller从基本控制器继承全部内容,希望文章能够帮你解决单元测试AngularJS控制器,它通过$controller从基本控制器继承所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。