angular 中的切换功能如何工作?
how the toggle function work in angular?
我提供这样的服务。
(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')
}
}
}
})();
现在我需要测试我的切换功能。
我喜欢这样,因为 below.But 我收到错误
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,而 Jasmine 2 中不存在 andReturn()
。The correct syntax 是 and.returnValue()
。
第二个错误:你没有在监视 setMode()
,尽管你想检查它是否已被调用。
这是您的 plunkr 的固定版本:http://plnkr.co/edit/JizWQijbH8FkCAI6jzpM?p=preview。
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');
});
});
我提供这样的服务。
(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')
}
}
}
})();
现在我需要测试我的切换功能。 我喜欢这样,因为 below.But 我收到错误
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,而 Jasmine 2 中不存在 andReturn()
。The correct syntax 是 and.returnValue()
。
第二个错误:你没有在监视 setMode()
,尽管你想检查它是否已被调用。
这是您的 plunkr 的固定版本:http://plnkr.co/edit/JizWQijbH8FkCAI6jzpM?p=preview。
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');
});
});