如何在 karma unittest 上调用其他方法?
how to call other method on karma unittest?
假设我有这样的服务:
app.factory('dataService', function () {
return {
getData: function (item) {
var item = addClaimItem(item) ;
return true;
},
addClaimItem: function (item) {
return false;
}
}}
我的测试是这样的:
beforeEach(function(){
inject(function (_dataService_) {
dataService = _dataService_;
}
);
dataService.addClaimItem = jasmine.createSpy('dataService').and.returnValue(true)
});
it('should find it',function(){
expect(dataService.getData({})).toBe(false);
});
出现错误:
TypeError: 'undefined' is not a function (evaluating 'this.addClaimitem(
我如何模拟或修复我在同一服务上调用另一个方法的测试?
我唯一想测试的是 getData
调用了 addClaimItem
。要对此进行测试,您可以 spy on addClaimItem
。例如
beforeEach(inject(function(_dataService_) {
dataService = _dataService_;
}));
it('getData calls through to addClaimItem', function() {
spyOn(dataService, 'addClaimItem');
var obj = {};
expect(dataService.getData(obj)).toEqual(true); // it returns true, not false
expect(dataService.addClaimItem).toHaveBeenCalledWith(obj);
});
假设我有这样的服务:
app.factory('dataService', function () {
return {
getData: function (item) {
var item = addClaimItem(item) ;
return true;
},
addClaimItem: function (item) {
return false;
}
}}
我的测试是这样的:
beforeEach(function(){
inject(function (_dataService_) {
dataService = _dataService_;
}
);
dataService.addClaimItem = jasmine.createSpy('dataService').and.returnValue(true)
});
it('should find it',function(){
expect(dataService.getData({})).toBe(false);
});
出现错误:
TypeError: 'undefined' is not a function (evaluating 'this.addClaimitem(
我如何模拟或修复我在同一服务上调用另一个方法的测试?
我唯一想测试的是 getData
调用了 addClaimItem
。要对此进行测试,您可以 spy on addClaimItem
。例如
beforeEach(inject(function(_dataService_) {
dataService = _dataService_;
}));
it('getData calls through to addClaimItem', function() {
spyOn(dataService, 'addClaimItem');
var obj = {};
expect(dataService.getData(obj)).toEqual(true); // it returns true, not false
expect(dataService.addClaimItem).toHaveBeenCalledWith(obj);
});