如何测试函数是否被调用(单元测试angular)
how to test if function was called (unit test angular)
嗨,我有一项 angular 服务。
...
return {
setMixpanel: function(searchObject){
searchObject["referrer"] ? mixpanel.register({"$referrer":searchObject["referrer"]}) : mixpanel.register({"$referrer":""});
}
}
在我的单元测试中,我可能必须 spyOn
mixpanel
和 register
。但我需要以某种方式模拟 mixpanel.register。
如何正确模拟 mixpanel.register
?代码去哪儿了。
我嘲讽如下:
var mixpanel={
register : function(object){
return object
}
};
但是我应该把这段代码放在哪里呢?正确吗?
我希望有人能帮助我吗?!
编辑:
测试本身看起来可能是这样的
it('should test', function(){
spyOn(mixpanel,'register');
redirectService.setMixpanel(search);
expect(mixpanel.register).toHaveBeenCalledWith('...');
})
但为了做到这一点,我需要模拟混音面板。如果我只是监视 mixpanel,我会得到一个错误。
您需要先创建一个 spyObject。无需模拟您的服务
beforeEach(function () {
myServiceSpy = jasmine.createSpyObj('myService');
module(function ($provide) {
$provide.value('myService', myServiceSpy);
});
});
测试
describe("myService", function() {
it("calls the getUser() function", function() {
/* Maybe this line unnecessary, cant try it atm */
spyOn(service, "getUser");
expect(service.getUser).toHaveBeenCalled();
});
});
如果你想测试 mixpanel.register
是否被调用,你需要为你的混音面板创建一个间谍对象。使用 $provide 你告诉测试使用间谍而不是真正的服务。
describe('mixPanel', function () {
mixPanelSpy = jasmine.createSpyObj('mixPanel');
beforeEach(module(function($provide) {
$provide.value("mixpanel", mixPanelSpy);
}));
beforeEach(inject(function (_mixpanelService_) {
mixpanelService = _mixpanelService_;
}));
it('should set mixpanel', function() {
mixpanelService.setMixPanel('test');
expect(mixpanel.register).toBeCalled();
});
});
写下了我的想法,也许您需要解决一些冲突
嗨,我有一项 angular 服务。
...
return {
setMixpanel: function(searchObject){
searchObject["referrer"] ? mixpanel.register({"$referrer":searchObject["referrer"]}) : mixpanel.register({"$referrer":""});
}
}
在我的单元测试中,我可能必须 spyOn
mixpanel
和 register
。但我需要以某种方式模拟 mixpanel.register。
如何正确模拟 mixpanel.register
?代码去哪儿了。
我嘲讽如下:
var mixpanel={
register : function(object){
return object
}
};
但是我应该把这段代码放在哪里呢?正确吗?
我希望有人能帮助我吗?!
编辑: 测试本身看起来可能是这样的
it('should test', function(){
spyOn(mixpanel,'register');
redirectService.setMixpanel(search);
expect(mixpanel.register).toHaveBeenCalledWith('...');
})
但为了做到这一点,我需要模拟混音面板。如果我只是监视 mixpanel,我会得到一个错误。
您需要先创建一个 spyObject。无需模拟您的服务
beforeEach(function () {
myServiceSpy = jasmine.createSpyObj('myService');
module(function ($provide) {
$provide.value('myService', myServiceSpy);
});
});
测试
describe("myService", function() {
it("calls the getUser() function", function() {
/* Maybe this line unnecessary, cant try it atm */
spyOn(service, "getUser");
expect(service.getUser).toHaveBeenCalled();
});
});
如果你想测试 mixpanel.register
是否被调用,你需要为你的混音面板创建一个间谍对象。使用 $provide 你告诉测试使用间谍而不是真正的服务。
describe('mixPanel', function () {
mixPanelSpy = jasmine.createSpyObj('mixPanel');
beforeEach(module(function($provide) {
$provide.value("mixpanel", mixPanelSpy);
}));
beforeEach(inject(function (_mixpanelService_) {
mixpanelService = _mixpanelService_;
}));
it('should set mixpanel', function() {
mixpanelService.setMixPanel('test');
expect(mixpanel.register).toBeCalled();
});
});
写下了我的想法,也许您需要解决一些冲突