加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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()
})

解决方法

正如评论中所说,你绝对不需要间谍来测试这样的服务.如果您必须为您的服务编写文档:您会说:

setValue() allows storing a value. This value can then be retrieved by calling 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);
  });
});

此外,您的服务不是工厂.工厂是用于创建事物的对象.您的服务不会创建任何内容.它使用工厂功能在角度模块中注册.但服务本身不是工厂.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读