angularjs – createSpy如何在Angular Jasmine中工作?
发布时间:2020-12-17 07:14:23 所属栏目:安全 来源:网络整理
导读:我做了一个工厂的简单演示,我试图用茉莉花测试这个.我能够运行测试,但我正在使用spyOn方法.我宁愿使用jasmine.createSpy或jasmine.createSpyObj来做同样的测试.有人可以帮我重构我的代码,以便在我的例子中使用这些方法吗? http://plnkr.co/edit/zdfYdtWbnQz
我做了一个工厂的简单演示,我试图用茉莉花测试这个.我能够运行测试,但我正在使用spyOn方法.我宁愿使用jasmine.createSpy或jasmine.createSpyObj来做同样的测试.有人可以帮我重构我的代码,以便在我的例子中使用这些方法吗?
http://plnkr.co/edit/zdfYdtWbnQz22nEbl6V8?p=preview describe('value check',function(){ var $scope,ctrl,fac; beforeEach(function(){ module('app'); }); beforeEach(inject(function($rootScope,$controller,appfactory) { $scope = $rootScope.$new(); ctrl = $controller('cntrl',{$scope: $scope}); fac=appfactory; spyOn(fac,'setValue'); fac.setValue('test abc'); })); it('test true value',function(){ expect(true).toBeTruthy() }) it('check message value',function(){ expect($scope.message).toEqual(fac.getValue()) }) it("tracks that the spy was called",function() { expect(fac.setValue).toHaveBeenCalled(); }); it("tracks all the arguments of its calls",function() { expect(fac.setValue).toHaveBeenCalledWith('test abc'); }); }) 更新 angular.module('app',[]).factory('appfactory',function(){ var data; var obj={}; obj.getValue=getValue; obj.setValue=setValue; return obj; function getValue(){ return data; } function setValue(datavalue){ data=datavalue; } }).controller('cntrl',function($scope,appfactory){ appfactory.setValue('test abc'); $scope.message=appfactory.getValue() }) 解决方法
正如评论中所说,你绝对不需要间谍来测试这样的服务.如果您必须为您的服务编写文档:您会说:
这就是你应该测试的: describe('appfactory service',function(){ var appfactory; beforeEach(module('app')); beforeEach(inject(function(_appfactory_) { appfactory = _appfactory_; })); it('should store a value and give it back',function() { var value = 'foo'; appfactory.setValue(value); expect(appfactory.getValue()).toBe(value); }); }); 此外,您的服务不是工厂.工厂是用于创建事物的对象.您的服务不会创建任何内容.它使用工厂功能在角度模块中注册.但服务本身不是工厂. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |