大佬教程收集整理的这篇文章主要介绍了单元测试 – 如何使用jasmine模拟Angular服务?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我对jas@L_262_2@和angularjs的经验非常有限.我来自C#背景.我经常编写单元测试moq(C#的模拟框架).我习惯看到这样的事情
[TESTClass] public PageControllerTests { private mock<ICookieStore> mockCookieStore; private PageController controller; [TesTinitialize] public void SetUp() { mockCookieStore = new mock<ICookieStore>(); controller = new PageController(mockCookieStore.object); } [TestMethod] public void GetsCarsFromCookieStore() { // Arrange mockCookieStore.Setup(cs => cs.Get("cars")) .Return(0); // Act controller@L_45_4@meMethod(); // Assert mockCookieStore.VerifyAll(); } }
我想模拟我在我的一个控制器中使用的$cookieStore服务.
app.controller('PageController',['$scope','$cookieStore',function($scope,$cookieStorE) { $scope.cars = $cookieStore.get('cars'); if($scope.cars == 0) { // Do other logic here . } $scope.foo = function() { . . } }]);
我想确保使用’garage’参数调用$cookieStore.get方法.我也希望能够控制它的回馈.我希望它返回0然后我的控制器必须做一些其他逻辑.
这是我的测试.
describe('Controller: PageController',function () { var controller,scope,cookieStoreSpy; beforeEach(function () { cookieStoreSpy = jas@L_262_2@.createSpyObj('CookieStore',['get']); cookieStoreSpy.get.andReturn(function(key) { switch (key) { case 'cars': return 0; case 'bikes': return 1; case 'garage': return { cars: 0,bikes: 1 }; } }); module(function($providE) { $provide.value('$cookieStore',cookieStoreSpy); }); module('App'); }); beforeEach(inject(function(_$httpBACkend_,$rootScope,$controller) { scope = $rootScope.$new(); controller = $controller; })); it('Gets car from cookie',function () { controller('PageController',{ $scope: scope }); expect(cookieStoreSpy.get).toHaveBeenCalledWith('cars'); }); });
在我的控制器中,我使用$LOCATIOn.path和$LOCATIOn.search.所以用我的模拟覆盖$LOCATIOn我做了:
LOCATIOnmock = jas@L_262_2@.createSpyObj('LOCATIOn',['path','search']); LOCATIOnmock.LOCATIOn = ""; LOCATIOnmock.path.andCallFake(function(path) { console.log("### Using LOCATIOn set"); if (typeof path != "undefined") { console.log("### SetTing LOCATIOn: " + path); this.LOCATIOn = path; } return this.LOCATIOn; }); LOCATIOnmock.search.andCallFake(function(query) { console.log("### Using LOCATIOn search mock"); if (typeof query != "undefined") { console.log("### SetTing search LOCATIOn: " + JSON.Stringify(query)); this.LOCATIOn = JSON.Stringify(query); } return this.LOCATIOn; }); module(function($providE) { $provide.value('$LOCATIOn',LOCATIOnmock); });
我没有在$controller中注入任何东西.它刚刚起作用.看看日志:
以上是大佬教程为你收集整理的单元测试 – 如何使用jasmine模拟Angular服务?全部内容,希望文章能够帮你解决单元测试 – 如何使用jasmine模拟Angular服务?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。