Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 切换功能如何在角度模式下工作?_Angularjs_Angularjs Directive_Jasmine_Karma Runner_Karma Jasmine - Fatal编程技术网

Angularjs 切换功能如何在角度模式下工作?

Angularjs 切换功能如何在角度模式下工作?,angularjs,angularjs-directive,jasmine,karma-runner,karma-jasmine,Angularjs,Angularjs Directive,Jasmine,Karma Runner,Karma Jasmine,我提供这样的服务 (function(){ 'use strict'; angular.module('desert').service('desertmanager',desertmanager); function desertmanager(){ this.mode='pie'; this.setMode=function(val){ this.mode=val; } this.getMode=function(){

我提供这样的服务

(function(){
  'use strict';
  angular.module('desert').service('desertmanager',desertmanager);

  function desertmanager(){
    this.mode='pie';
    this.setMode=function(val){
      this.mode=val;
    }

    this.getMode=function(){
      return this.mode;
    }

  }
})();
像那样在我的控制器中使用该服务

(function(){
  'use strict';
  angular.module('app.home').controller('homeCntrl',homeCntrl);
  homeCntrl.$inject=['desertmanager'];

  function homeCntrl(desertmanager){
    //alert(desertmanager.getMode());
    var home=this;
    home.clickbtn=function(){

      home.message='test';
      alert(home.message)
    }

    home.toggle=function(){
      if(desertmanager.getMode()=='pie'){
        desertmanager.setMode('cake')
      }else{
        desertmanager.setMode('yellow')
      }
    }
  }
})();
现在我需要测试我的切换功能。 我喜欢这样做如下。但我得到这个错误

describe('toggle mode ',function(){
    var modeSpy;
    beforeEach(function(){
      modeSpy=spyOn(desertmanager,'getMode').andReturn('pie');
    })

    it('called',function(){
      controller.toggle();
      expect(modeSpy).toHaveBeenCalledWith('cake');  

    })
  })
我得到了这个错误

TypeError:spyOn(…).andReturn不是函数

如何测试我的切换功能?如何删除此错误

这是我的密码

第一个错误:您使用的是Jasmine 2,
andReturn()
在Jasmine 2中不存在。是
和.returnValue()

第二个错误:您没有监视
setMode()
,尽管您想检查它是否已被调用

以下是您的plunkr的固定版本:


最新版本是什么?我看到的最新版本是2.4?andReturn方法是否在2.4中?我们能把代码改成2.4版本吗
describe('toggle mode ',function(){
    beforeEach(function(){
      spyOn(desertmanager,'getMode').and.returnValue('pie');
      spyOn(desertmanager, 'setMode');
    });

    it('called',function(){
      controller.toggle();
      expect(desertmanager.setMode).toHaveBeenCalledWith('cake');  
    });
});